nyoj-14-會場安排


會場安排問題

時間限制: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;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章