[贪心专题]A.看电视

来源:互联网 发布:树状图 软件 编辑:程序博客网 时间:2024/05/18 06:53

问题 A: 看电视

时间限制: 1 Sec  内存限制: 32 MB

题目描述

暑假到了,小明终于可以开心的看电视了。但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目。
现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?

输入

输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示小明喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
当n=0时,输入结束。

输出

对于每组输入,输出能完整看到的电视节目的个数。

样例输入

121 33 40 73 815 1915 2010 158 186 125 104 142 90

样例输出

5

题目解释

中文题就不解释题意啦!简单说一下做法吧:为了让小明看到更多的电视节目,每个节目结束时间越早,后面能看的节目数量相对就会更多,因此可以先对数据进行一次排序,按照结束时间由早到晚排,然后比较当前结束时间与下一个节目的开始时间是否冲突,不冲突则计数加一,最后输出计数就完成啦!


具体代码

#include<stdio.h>
#include<stdlib.h>
typedef struct tv{//建立结构体,包含开始时间与结束时间两个整型变量
    int start;
    int end;
}tv;
int sort(const void *a,const void *b){//qsort结构体排序
    tv *c = (tv*)a;
    tv *d = (tv*)b;
    if(c->end != d->end)
        return(c->end - d->end);
    else
        return(c->start - d->start);
}
int main(){
    int t;
    while(scanf("%d", &t) && t){
    struct tv A[t];
        int i, n, j;//n为计数
        for(i = 0; i < t; ++i){
            scanf("%d%d", &A[i].start, &A[i].end);//读入数据
        }
        qsort(A,t,sizeof(tv),sort);//对于结束时间进行qsort排序
        for(i = 0, n = 1; i < t;i = j){
            for(j = i+1; j < t; ++j){
                if(A[i].end <= A[j].start){
                    ++n;
                    break;
                }
            }
            
        }
        printf("%d\n", n);
    }   
}


附言

这里是一个正在掉头发的咸鱼acmer!写博客就是因为太咸鱼啦 同为秃子的男盆友看不下去 说要监督我QwQ 也欢迎大家来监督哦!菜狗也想和大家一起学习!欢迎大家发现错误 尽情的指责我吧!