当前位置:编程学习 > C/C++ >>

hud_2037-今年暑假不AC

[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;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,