题目描述
2014年是世界杯年,小明作为一个资深球迷必然不会错过这场足球界的饕餮盛宴。但是由于比赛太多,而且并不是任何时间小明都能够看球赛,所以小明把他重点关注的那些球赛的转播时间表给你,希望你能够帮他合理安排一下,让他能够尽量多的看到完整的球赛。
输入格式
输入包含多组测试数据,每组输入的第一行是一个整数n(n<=100),表示小明重点关注的球赛数目。(实际上一届世界杯总共有64场球赛,这里我们假设一届世界杯最多有100场比赛)
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i场球赛的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。(这里我们也不限制每场球赛必须是90分钟)
当n=0时,输入结束。
输出
对于每组输入,输出能完整看到的球赛的场数。
样例输入
8
39 81
16 79
87 93
81 90
79 83
97 100
87 98
89 100
样例输出
4
采用贪心算法即可。在可以观看的比赛中,每次都选择结束时间最早的比赛。代码如下:
#include<iostream>
#include<queue>
#include<algorithm>
#include<functional>
#include<cstdio>
const int MAXN = 100;
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("D:\\in.txt", "r", stdin);
freopen("D:\\out.txt", "w", stdout);
#endif
int n(0);
while (cin >> n)
{
if (n == 0)
break;
pair<int, int> itv[MAXN];
for (int i = 0; i < n; i++)
{
cin >> itv[i].second >> itv[i].first;
}
sort(itv, itv + n);
int ans(0), t(0);//t是最后所选工作的结束时间
for (int i = 0; i < n; i++)
{
if (t <= itv[i].second)
{
ans++;
t = itv[i].first;
}
}
cout << ans << endl;
}
return 0;
}