題目描述
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;
}