Input第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000Output一行包含一个整数表示最少教室的个数。Sample Input
3 1 2 3 4 2 9Sample Output
2
题解:就是开始时间早的的并且时间短的排在前头先用之后考虑别的是否还需要教室
也就是 先把结束时间从小到大拍序,并且结束时间一样的开始时间早的排在后面
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct point{
long s,e;
}p[10005];
bool cmp(struct point a,struct point b){
if(a.e==b.e)
return a.s<b.s; //结束时间一样,按开始时间从小到大排序
return a.e<b.e;
}
int main()
{
int i,j,n;
while(~scanf("%d",&n)){
for(i=0;i<n;i++){
scanf("%ld %ld",&p[i].s,&p[i].e);
}
sort(p,p+n,cmp);//排序,按结束时间
int sum=0,max;
for(i=0;i<n;i++){
max=1;
for(j=i+1;j<n;j++){
if(p[j].s<p[i].e)
max++;
}
sum=sum>max?sum:max; //最多的房子数
}
printf("%d\n",sum);
}
return 0;
}