HDU - 2037 ACなしでこの夏(貪欲)

制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):90034受理提出(S):48081

問題の説明

「ACなしでこの夏?」
「はい。」「何をして
、あなたがやっている?」
「うん愚かなワールドカップを、見て!」
「@のの#$%^&*%...」
祭りのファンに実際に、ワールドカップまた、それは多くのACMerがテレビに向かって、コンピュータを脇に置くだろうと推定し、来ました。
ファンとして、私たちは、6 + 7、スーパーで良い若者の新しい時代として、あなたはまた、このようなニュースネットワークなど、いくつかの他のプログラムを見て(国事に関するその心配を決して忘れない)しなければならない、もちろん、完全なゲームの多くを見たいです女の子、そして「幸せな辞書」の王小鴨というように、あなたはすでにあなたはすべてのテレビ番組の放送スケジュールを見るのが好き知っていると仮定すると、あなたはそれを手配しますか?(目標は、完全なプログラムの多くを見ることがあります)

入力

試験例の複数を含む入力データは、各テストケースのみ1個の整数N(N <= 100)の最初の行は、各列が2つのデータTi_sを含む、あなたが好きなプログラム、n個の行の合計数を表し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 <bits/stdc++.h>
using namespace std;
pair<int, int> a[101];
bool cmp(pair<int, int> lef, pair<int, int> rhs)
{
    return lef.second < rhs.second;
}
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    int n;
    while (cin >> n && n)
    {
        for (int i = 0; i < n; i++)
            cin >> a[i].first >> a[i].second;

        sort(a, a + n, cmp);
        int time = a[0].second;
        int cnt = 1;
        for (int i = 1; i < n; i++)
        {
            if (a[i].first >= time)
            {
                time = a[i].second;
                cnt++;
            }
        }
        cout << cnt << endl;
    }
}

おすすめ

転載: www.cnblogs.com/YY666/p/11346758.html