Submission #1177558

#TimeUsernameProblemLanguageResultExecution timeMemory
1177558PAndaSSails (IOI07_sails)C++20
15 / 100
1096 ms7048 KiB
#include<iostream>
#include<set>
#include<vector>
#include<map>

using namespace std;
class cmp {
public:
    bool operator()(pair<int,int> a, pair<int,int> b) const{
        return ((a.first != b.first)?(a.first < b.first):(a.second > b.second));
    }
};

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n; cin >> n;
    int max_h = 0;
    vector<int> hs(n), ks(n);
    for(int i = 0; i < n; i++){
        cin >> hs[i] >> ks[i];
        max_h = max(max_h, hs[i]);
    }
    set<pair<int, int>, cmp> ord;
    for(int i = 0; i < max_h; i++){
        ord.insert(pair<int, int>(0, i));
    }
    int ans = 0;
    map<int, bool> occ;
    for(int i = n - 1; i >= 0; i--){
        occ.clear();
        while(ks[i]){
            for(auto p = ord.begin(); p != ord.end() && ks[i]; p++){
                if((*p).second < hs[i] && !occ[(*p).second]){
                    ks[i]--;
                    ans += (*p).first;
                    occ[(*p).second] = true;
                    ord.insert(pair<int, int>((*p).first + 1, ((*p).second)));
                    ord.erase(p);
                    break;
                }
            }
        }
    }
    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...