有若干個活動,第i個開始時間和結束時間是[si,fi),同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?
input
第一行乙個正整數n (n <= 10000)代表活動的個數。
第二行到第(n + 1)行包含n個開始時間和結束時間。
開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000
output
一行包含乙個整數表示最少教室的個數。
input示例
3 1 2
3 4
2 9
output示例
2思路:
先排序。
如題,這裡弄個優先佇列(方便找最小終點),儲存終點,然後對每個活動,如果起點大於隊頂的終點時,更新隊頂元素為這個活動的終點,否則就把這個活動的終點直接放進去(相當於多了個教室),然後輸出佇列的size就好了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define mod 1000000007
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
typedef
long
long ll;
struct nodee[10005];
bool cmp(node a,node b)
sort(e,e+n,cmp);
priority_queue,greater >p;
p.push(e[0].r);
for(int i=1;iif(e[i].l>=p.top())
else p.push(e[i].r);
}cout
0;}
51 Nod1428活動安排
1428 活動安排問題 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000 ou...
51nod1428 優先佇列
題意 中文題誒 思路 貪心 問最少要多少教室就是求最多有多少個時間段產生了交集咯。我們先用結構體儲存區間並將其按照左端點公升序排列,若左端點相同則按右端點公升序排列。接下來遍歷所有區間,並維護乙個優先佇列,其中儲存區間右端點值。對於當前區間,我們將優先佇列中所有比當前區間左端點小的元素刪除 因為其所...
51nod 1428 (貪心 優先佇列)
input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000 output 一行包含乙個整數表示最少教室的個數。思路 發現好多貪心的題目都是用優先佇列來解決的。著個題目實際上...