您的位置:首页 > 编程语言 > C语言/C++

[贪心专题]A.看电视

2017-10-13 20:26 169 查看


问题 A: 看电视

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


题目描述

暑假到了,小明终于可以开心的看电视了。但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目。

现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?


输入

输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示小明喜欢的节目的总数。

接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。

当n=0时,输入结束。


输出

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


样例输入

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0


样例输出

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){ 
4000
           for(j = i+1; j < t; ++j){                if(A[i].end <= A[j].start){                    ++n;                    break;                }            }                    }        printf("%d\n", n);    }   }


附言

这里是一个正在掉头发的咸鱼acmer!写博客就是因为太咸鱼啦 同为秃子的男盆友看不下去 说要监督我QwQ 也欢迎大家来监督哦!菜狗也想和大家一起学习!欢迎大家发现错误 尽情的指责我吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  贪心 C语言