Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 35462 Accepted Submission(s): 18890
12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
5
首先,确立判断标准,即根据什么来判断可以看的节目多或者少。
答案是根据结束的时间来看,因为结束时间越早,你看下一个节目的可能性就越多。但是这里存在一个问题,如果时间交叉了怎么办。那么就需要开始时间来判断了。
所以这道题的思路是:根据结束时间对结构体进行排序以期获得更多的机会来看节目。同时在while循环中用开始时间来判断是否能看到下一个节目。
另外值得注意的是,count初值要为1,表示已经看了一个节目了。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct program{ int s; int e; }time[110]; int cmp(program a,program b){ return a.e<b.e; } int main(){ int n; while(~scanf("%d",&n)&&n){ memset(time,0,sizeof(time)); int i; for(i=0;i<n;i++){ scanf("%d%d",&time[i].s,&time[i].e); } sort(time,time+n,cmp); int temp=time[0].e,count=1; for(i=1;i<n;i++){ if(time[i].s>=temp){ count++; temp=time[i].e; } } printf("%d\n",count); } return 0; }