https://blog.csdn.net/annmike/article/details/78751564
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Sample Input
3
1 2
3 4
2 9
Sample Output
2
对开始时间和结束时间进行升序排序,重新组成一些抽象的活动,因为这些时间段都要安排进行。
贪心:在一个会场中,最多能进行多少次活动。
当开始时间在结束时间之前,也就是开始时间大于结束时间时,一个会场就不能满足。会场数++
例如 1 2, 2 9, 3 4
生成 1 2。 2 4。3 9。只有两个活动可以进行,相当于1 2 和 3 4 进行了一样!!!
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int n;
int i,j;
int sum;
long long int a[10000];
long long int b[10000];
while(scanf("%d",&n)!=EOF)
{
sum=0;
for(i=0;i<n;i++)
scanf("%lld %lld",&a[i],&b[i]);
sort(a,a+n);//开始时间单独排序
sort(b,b+n);//结束时间单独排序
j=0;
for(i=0;i<n;i++)
{
if(a[i]<b[j])//开始时间在结束时间前就加一个会场
sum++;
else
j++;//否则不用安排单独的会场直接放在此活动结束的会场然后遍历下一个结束的早的会场
}
printf("%d\n",sum);
}
return 0;
}