121 33 40 73 815 1915 2010 158 186 125 104 142 90Sample Output5題解:先把每一段時間用結(jié)構(gòu)體記錄下來,然后根據(jù)結(jié)束的時間進(jìn)行排序,如果遇到結(jié)束時間相同的,就把開始時間按照升序進(jìn)行排列。排列完后把結(jié)束的時間和后一段開始的時間進(jìn)行比較,如果后一段開始的時間在前一段結(jié)束的時間之后,就選擇這一段進(jìn)行觀看。
我的代碼:
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<iomanip>#include<string.h>using namespace std;struct TM{ //注意這里不能用time作結(jié)構(gòu)體名字,因?yàn)閠ime本身是個函數(shù)。 int s, e;}t[110];int cmp(TM a, TM b){ if (a.e == b.e) return a.s > b.s;//如果結(jié)束時間相同,開始時間越大的,觀看時間越短,越看更多的節(jié)目 return a.e < b.e;//第一約束條件還是結(jié)束時間,因?yàn)楣?jié)目結(jié)束時間決定了最終觀看結(jié)束時間}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)//如果節(jié)目的開頭大于前一段的結(jié)尾,則選擇這一個節(jié)目。 { exa = t[i].e; k++; } } cout << k << endl; } return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選