解题思路:把每个时间段按照结束时间从小到大排列,如果结束时间相同则把开始时间按照从大到小排列。因为开始的时间越晚整个看电视的过程就比较短,多余的时间可以用来选择其他类型的节目,这样所看的节目就比较多了。
#include <cstdio>
#include <cstring>
#include<algorithm>
using namespace std;
struct AC{
int start;
int end;
bool operator < (const AC &b)const{
if(end != b.end)
return end < b.end;
else
return start > b.start;
}
}AC[200];
int main(){
int n;
while(scanf("%d",&n) != EOF && n != 0){
for(int i = 0;i < n;i++){
scanf("%d%d",&AC[i].start,&AC[i].end);
}
sort(AC,AC+n);
int ans = 1,tmp = AC[0].end;
for(int i = 1;i < n;i++){
if(tmp <= AC[i].start){
ans++;
tmp = AC[i].end;
}
}
printf("%d\n",ans);
}
return 0;
}