基准时间限制:1 秒 空间限制:131072 KB 分值: 10
难度:2级算法题
Input
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3 1 2 3 4 2 9
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;
}