[伯俊/BOJ]6068管理時間[Gold 5]

1655 ワード

  • 時間管理
  • 質問元:https://www.acmicpc.net/problem/6068
    code
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        int N, i, time;
        cin >> N;
        vector<pair<int, int>> arr(N);
        for (i = 0; i < N; i++)
            cin >> arr[i].second >> arr[i].first;
    
        sort(arr.begin(), arr.end(),greater<>());
    
        time = arr[0].first - arr[0].second;
    
        for (i = 1; i < N; i++)
        {
            if (time <= arr[i].first)
                time -= arr[i].second;
            else
            {
                time = arr[i].first;
                time -= arr[i].second;
            }
        }
    
        if (time > 0)
            cout << time;
        else
            cout << -1;
    
        return 0;
    }
    pairでソートして降順にソートすると、
    逆に遡及すると、結果は負数または正数として表示されます.
    正数であれば、朝寝坊できるということで、
    負数が発生すると、どんなに早く起きてもすべての作業が完了しないため、-1を印刷します.
    金の問題は大体難しいと思っていたが、思ったより簡単だったようだ.