會場安排問題
時間限制:3000 ms | 內存限制:65535 KB
難度:4
-
描述
- 學校的小禮堂每天都會有許多活動,有時間這些活動的計劃時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排一個活動。現在小劉有一些活動計劃的時間表,他想儘可能的安排更多的活動,請問他該如何安排。
-
輸入
- 第一行是一個整型數m(m<100)表示共有m組測試數據。
每組測試數據的第一行是一個整數n(1<n<10000)表示該測試數據共有n個活動。
隨後的n行,每行有兩個正整數Bi,Ei(0<=Bi,Ei<10000),分別表示第i個活動的起始與結束時間(Bi<=Ei)
-
輸出
- 對於每一組輸入,輸出最多能夠安排的活動數量。
每組的輸出佔一行 -
樣例輸入
-
2
2
1 10
10 11
3
1 10
10 11
11 20
-
樣例輸出
-
1
2
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
#define SIZE 10005
struct Act
{
int s;
int e;
}acts[SIZE];
bool Cmp(const Act a, const Act b)
{
return a.e < b.e;
}
int fun(int n)
{
//按結束時間從小到大排序
sort(acts, acts+n, Cmp);
int count = 0;
int cur = -1; //當前時間
for (int i=0;i<n;i++)
{
if (acts[i].s > cur)
{
count++;
cur = acts[i].e;
}
}
return count;
}
int main(void)
{
int n;
scanf("%d", &n);
while (n-- != 0)
{
int nn;
scanf("%d", &nn);
int i;
for (i = 0; i < nn; i++)
{
scanf("%d%d", &acts[i].s, &acts[i].e);
}
printf("%d\n", fun(nn));
}
return 0;
}