121 33 40 73 815 1915 2010 158 186 125 104 142 90Sample Output5题解:先把每一段时间用结构体记录下来,然后根据结束的时间进行排序,如果遇到结束时间相同的,就把开始时间按照升序进行排列。排列完后把结束的时间和后一段开始的时间进行比较,如果后一段开始的时间在前一段结束的时间之后,就选择这一段进行观看。
我的代码:
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<iomanip>#include<string.h>using namespace std;struct TM{ //注意这里不能用time作结构体名字,因为time本身是个函数。 int s, e;}t[110];int cmp(TM a, TM b){ if (a.e == b.e) return a.s > b.s;//如果结束时间相同,开始时间越大的,观看时间越短,越看更多的节目 return a.e < b.e;//第一约束条件还是结束时间,因为节目结束时间决定了最终观看结束时间}int main(){ int n, i; while(scanf("%d", &n),n) { int k = 1, exa; for (i = 0; i < n; i++) scanf ("%d %d", &t[i].s, &t[i].e); sort(t, t+n, cmp); exa = t[0].e; for (i = 0; i < n; i++) { if(t[i].s >= exa)//如果节目的开头大于前一段的结尾,则选择这一个节目。 { exa = t[i].e; k++; } } cout << k << endl; } return 0;}
新闻热点
疑难解答