BOJ_6068


👍 似たような問題をやったことが思い出せないが,どうせ簡単にやったのだ.

💻 6068号:管理時間


  • 終了時間が一番大きいところから降順に並べばいいです.
  • 高炉정렬および그리디は簡単に説明できる.
  • の順序で、끝나는 시간 - 걸리는 시간で計算された値が次の끝나는 시간より大きい場合、更新される.
  • 未満の場合、걸리는 시간はこの値から減算される.
  • 💻 完全なコード
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <string.h>
    
    using namespace std;
    
    #define endl "\n"
    
    bool compare(pair<int, int> a, pair<int, int>b)
    {
        if(a.second==b.second)
            return a.first > b.first;
        return a.second > b.second;
    }
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);
    
        int N;
    
        cin >> N;
    
        vector<pair<int,int> > v;
    
        for (int i = 0; i < N;i++)
        {
            int first, second;
            cin >> first >> second;
            v.push_back(make_pair(first, second));
        }
    
        sort(v.begin(), v.end(), compare);
    
        int num = v[0].second - v[0].first;
        for (int i = 1; i < v.size(); i++)
        {
            if(num > v[i].second)
                num = v[i].second - v[i].first;
            else
                num -= v[i].first;
        }
        if(num < 0)
            cout << -1 << endl;
        else
            cout << num << endl;
    }
    ああ!最後に得られた値が負数であれば、すべてが完了しないので、ifゲートで答えを共有してください.