[cpp] /* 題目大意:給出節目的開始和結束時間,求最多能看多少完整節目 * 解題思路:首先按節目時間排序,因為必須是完整節目,所以要選取上一節目結束後 * 最早開始並盡快結束的節目。 */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAX 101 struct node { int x, y; } a[MAX], b[MAX]; bool cmp(node a, node b) { if( a.x != b.x ) { return a.x < b.x; } else { return a.y < b.y; } } int main(int argc, char const *argv[]) { #ifndef ONLINE_JUDGE freopen("test.in", "r", stdin); #endif int cnt, ans; while( scanf("%d", &cnt), cnt ) { ans = 0; for(int i = 0; i < cnt; i ++) scanf("%d %d", &a[i].x, &a[i].y); sort(a, a + cnt, cmp); for(int i = 0; i < cnt; i ++) { if( !i ) b[++ans] = a[i]; else { if( a[i].x >= b[ans].y ) { //開始時間大於上節目結束時間,新增 b[++ans] = a[i]; } else if( a[i].y < b[ans].y ) { //如果結束時間小於上節目結束時間,替換 b[ans] = a[i]; } } } printf("%d\n", ans); } return 0; }