51nod 1428 活动安排问题

来源:互联网 发布:全球酒店排名 知乎 编辑:程序博客网 时间:2024/06/05 10:40
1428 活动安排问题
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
 收藏
 关注
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? 
Input
第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
31 23 42 9
Output示例


这个活动安排问题,有一种比较好的思路,把时间段转化为数轴上的线段,即求线段的最大重合次数,所以就可以把所有点记录下来;
sort后遍历一遍,如果是活动开始,则房子+1;如果是活动结束,则房子-1;
注意房子-1的下界

//@auther zhou//@Number 201408070203//@start time://@finish time:/*@此处注意:*//* 测试数据*/#include<iostream>#include<cstring>#include<vector>#include<cmath>#include<algorithm>using namespace std;struct time{int dot;int inorout;//0开始,1结束 };bool cmp(time a,time b){if(a.dot<b.dot)return 1;else if(a.dot==b.dot){if(a.dot==1) return 1;}return 0;}int main(){int num;cin>>num;vector<time> x;time temp;int org=0;for(int i=0;i<num*2;i++){cin>>temp.dot;temp.inorout=org%2;org++;x.push_back(temp);}sort(x.begin(),x.end(),cmp);int m=0,maxuse=0;for(int i=0;i<num*2;i++){if(x[i].inorout==1){//出 m=max(m-1,0);}else{//入 m++;}maxuse=max(maxuse,m);}cout<<maxuse;return 0;}


0 0
原创粉丝点击