有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3 1 2 3 4 2 9
Output示例
2
这题真坑 ! 刚开始我的思路是 先看第一个房间 有多少个活动可以在这个房间里面举行! 标记举行过的活动 然后开第二个房间! 在找第二个房间可以举行的活动标记 这个方法很麻烦 (n*n)需要把所有的房间遍历一遍
然后 就看到了下面这个代码 看了代码之后想了好多时间 才想明白!别人真是太聪明了!
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(cin>>n&&n){
int j,k,l=0,i=0,t=0,a[10010],b[10001];
for(j=0;j<n;j++){
cin>>a[j]>>b[j];
}
sort(a,a+n);
sort(b,b+n);
for(j=0;j<n;j++){
if(a[j]<b[i]){
t++;
if(l<t)
l=t;
}
else{
i++;
}
}
cout<<l<<endl;
}
return 0;
}
//这个思路是找结束时间最近的教室! 如果这个教室结束时间大于开始时间说明这个教室还在使用当中 这个时候需要房间+1; 如果小于 说明 这个房间已经可以使用了 就找下一个结束时间最近的教室 以此类推! 感觉人家好机智啊!!!! 实在佩服 画图 看图 看了好长时间才明白!