【贪心】电视节目安排

题目描述

李旭琳发现小墨老师在班上是最顽劣的学生(没有之一),但他也有安静的时候,例如在看电视的时候。像什么“谍战剧”啊,“翻拍剧”啊,“婆媳戏”啊,“后宫剧”啊都是他的最爱。他甚至会事先查询所有喜欢看的电视节目的转播时间表并煞有介事的用红蓝铅笔列出计划,然后合理安排,以看到尽量多的完整节目。

输入

输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n≤100),表示喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (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 <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
pair<int,int>aa[115];
int n,ans,tag;

void init(){

}
void swap(int&a,int&b){
    int tmp=a;
    a=b;
    b=tmp;
}
bool cmp(pair<int,int>a,pair<int,int>b){
    return a.second<b.second;
}
void solve(){
    while(cin>>n,n){
        int s,e;
        range(i,1,n){
            cin>>s>>e;
            if(s>e)swap(s,e);
            aa[i].first=s;
            aa[i].second=e;
        }
        sort(aa+1,aa+1+n,cmp);
        tag=ans=0;
        range(i,1,n)
        if(aa[i].first>=tag){
            ++ans;
            tag=aa[i].second;
        }
        cout<<ans<<endl;
    }
}
int main() {
    init();
    solve();
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Rhythm-/p/9341568.html