Submission #1368240

#TimeUsernameProblemLanguageResultExecution timeMemory
1368240africBikeparking (EGOI24_bikeparking)C++20
25 / 100
19 ms5080 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);

    int n;
    cin >> n;
    vector<long long> slot; slot.reserve(n);
    for (int i = 0; i < n; i++) {
        long long x;
        cin >> x;
        slot.push_back(x);
    }
    vector<long long> bike; bike.reserve(n);
    for (int i = 0; i < n; i++) {
        long long x;
        cin >> x;
        bike.push_back(x);
    }
    int tierPtr = n-2;
    long long counter = 0LL;
    for (int i = n-1; i >=0 && tierPtr!=-1; i--) {
        while (bike[i] > 0LL) {
            tierPtr = min(tierPtr, i-1);
            while (tierPtr >= 0 && slot[tierPtr]==0) {
                tierPtr--;
            }
            if (tierPtr == -1) {
                // we don't get a +1 for this
                break;
            }
            if (slot[tierPtr] > bike[i]) {
                counter += bike[i];
                slot[tierPtr] -= bike[i];
                bike[i] = 0;
            }
            else {
                counter += slot[tierPtr];
                bike[i] -= slot[tierPtr];
                slot[tierPtr] = 0;
            }
        }
    }
    for (int i = (n-1); i >= 0; i--) {
        //can take +0
        if (slot[i] > 0) {
            if (bike[i] > slot[i]) {
                bike[i] -= slot[i];
                slot[i] = 0;
            }
            else {
                slot[i] -= bike[i];
                bike[i] = 0;
            }
        }
    }
    for (long long i : bike) {
        counter -= i;
    }
    cout << counter << '\n';
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...