(已经好久没陪姥爷看电视了。)寒假回家看电视

题目描述

寒假到了,小明回到家和爸妈打声招呼就奔向电视了,作为一个资深电视迷,一定想看尽量多的完整的电视节目,以弥补学校枯燥的学习生活。假设你已经知道了所有小明喜欢看的电视节目的转播时间表,请你帮助小明合理安排时间(目标是能看尽量多的完整节目)

输入

输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。

输出

对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。

样例输入

copy
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

提示

 

可以使用系统函数 qsort 

包含头文件#include <stdlib.h>

其中qsort的声明如下:

void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

 

#include<bits/stdc++.h>
using namespace std;
///区间贪心问题
struct tvshow
{///定义结构体是一种常规想法
    int x,y;///开始结束时间,即区间端点
}show[101];
bool cmp(tvshow a,tvshow b)
{///关键思想
    if(a.x!=b.x)return a.x>b.x;///左端点按从大到小排序
    else return a.y<b.y;///左端点相同,右端点从小到大排序
}
int main()
{
    int n;
    while(cin>>n&&n)
    {
        for(int i=0; i<n; i++)
            cin>>show[i].x>>show[i].y;///结构体输入
        sort(show,show+n,cmp);
        int sum=1,min=show[0].x;
        for(int i=1; i<n; i++)
        {///如果从第二个区间开始有右端点比前面区间的左端的要小
            ///肯定不相交!!!
            if(show[i].y<=min)
            {///就把该区间的左端作为最小值
                min=show[i].x;
                sum++;///恭喜你!!!找到一个区间啦!!!
            }
        }
        cout<<sum<<endl;///找到不相交的总数
    }
}
inline char gc()
{
    static char buff[100000000], *S = buff, *T = buff;
    return S == T && (T = (S = buff) + fread(buff, 1, 100000000, stdin), S == T) ? EOF : *S++;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值