ZOJ 3721—— Final Exam Arrangement

来源:互联网 发布:linux 进入文件夹 编辑:程序博客网 时间:2024/05/08 18:50

题意为安排时间相交的两门课安排在同一天考试,先排序,然后遍历每一次后面的和前面的有相交的区间,把后一个的区间改为相交的那一部分。

#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <cmath>#include <vector>#include <cstdio>using  namespace std;struct node{int st;int et;int t;int idt;}c[101000];bool cmp(node a,node b){if(a.st==b.st){return a.et<b.et;}return a.st<b.st;}int main(){int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d%d",&c[i].st,&c[i].et);c[i].idt=i;}sort(c+1,c+n+1,cmp);c[1].t=1;int time=1;for(int i=2;i<=n;i++){if(c[i].st<c[i-1].et){c[i].t=time;c[i].st = max(c[i].st, c[i-1].st);c[i].et = min(c[i].et, c[i-1].et);}else{time++;c[i].t=time;}}printf("%d\n",time);for(int j=1;j<=n;j++){if(c[j+1].t==c[j].t){printf("%d ",c[j].idt);}else{printf("%d\n",c[j].idt);}}}return 0;}


0 0
原创粉丝点击