活動安排問題

有若干個活動,第i個開始時間和結束時間是[Si,fi),同一個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室? 


Input 第一行一個正整數n (n <= 10000)代表活動的個數。
第二行到第(n + 1)行包含n個開始時間和結束時間。
開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000 Output 一行包含一個整數表示最少教室的個數。 Sample Input
3
1 2
3 4
2 9
Sample Output
2
題解:首先將開始時間和結束時間分別放進s和t數組裏,然後從s數組裏的第一個元素s1開始和t的第一個元素t2進行比較,若s1比t1大,則count++,然後比較s2和t1,若t1大,則比較t2,以此重複循環,直至s或t數組遍歷完。這樣寫的目的是:當開始時間小於結束時間,說明得需要加一個房間供此活動,如果大於,說明可以在同一個房間,不需要+1.代碼如下:

#include<cstdio>
#include<algorithm>
using namespace std;
int starttime[10001];
int endtime[10001];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<=n-1;i++){
		scanf("%d",&starttime[i]);
		scanf("%d",&endtime[i]);
	}
	sort(starttime,starttime+n);
	sort(endtime,endtime+n);
	int sum=0;
	int a=0;
	int b=0;
	for(a=0;a<=n-1;a++){
		if(starttime[a]<endtime[b]){//開始時間小於結束時間
			sum++;
		}else{//開始時間大於等於結束時間
			b++;
		}
	}
	printf("%d",sum);
	return 0;
 } 



發佈了36 篇原創文章 · 獲贊 6 · 訪問量 9753
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章