Submission #1243648

#TimeUsernameProblemLanguageResultExecution timeMemory
1243648ArturgoDistributing Candies (IOI21_candies)C++20
3 / 100
5090 ms11100 KiB
#include "candies.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> distribute_candies(vector<int> bornes, vector<int> debs, vector<int> fins, vector<int> ajouts) {
    vector<int> final(bornes.size(), -1);

    for(int pos = 0;pos < (int)bornes.size();pos++) {
        vector<long long> cumul = {0};

        for(int iOperation = 0;iOperation < (int)ajouts.size();iOperation++) {
            if(debs[iOperation] <= pos && pos <= fins[iOperation]) {
                cumul.push_back(cumul.back() + ajouts[iOperation]);
            }
        }

        long long mini = cumul.back(), maxi = cumul.back();
        int premFail = cumul.size();
        for(int p = (int)cumul.size() - 1;p >= 0;p--) {
            mini = min(mini, cumul[p]);
            maxi = max(maxi, cumul[p]);
            if(maxi - mini >= bornes[pos]) {
                premFail = p;
                break;
            }
        }

        if(maxi == cumul[premFail] || premFail == cumul.size()) {
            if(premFail == cumul.size()) premFail = 0;

            long long minApres = *min_element(cumul.begin() + premFail, cumul.end());
            final[pos] = cumul.back() - minApres;
        } else {
            long long maxApres = *max_element(cumul.begin() + premFail, cumul.end());
            final[pos] = bornes[pos] - (maxApres - cumul.back());
        }
    }

    return final;
}
#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...