51nod-活动安排问题之二

来源:互联网 发布:淘宝旺旺名是什么意思 编辑:程序博客网 时间:2024/05/21 08:45


有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室?

输入

第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000

输出

一行包含一个整数表示最少教室的个数。

输入示例

31 23 42 9

输出示例

2

#include<cstdio>#include<algorithm>using namespace std;struct node{long long str;long long end;}arr[10000+11];bool cmp(node a,node b){if(a.str==b.str)return a.end<b.end;return a.str<b.str;}long long b[10000+11]; int main(){int n;scanf("%d",&n);for(int i=0;i<n;++i)scanf("%lld%lld",&arr[i].str,&arr[i].end);sort(arr,arr+n,cmp);b[0]=arr[0].end;//记录结束的时间int i,j;long long sum=1;for(i=1;i<n;++i){for(j=0;j<sum;++j) {if(arr[i].str>=b[j])//成立代表可以用这个教室,教室不增加,更新结束时间 {b[j]=arr[i].end;break; } } if(j==sum)//代表找不到教室,那就增加教室并更新结束时间 {b[sum]=arr[i].end;++sum; } }printf("%lld\n",sum); return 0; } 


0 0
原创粉丝点击