Submission #1176715

#TimeUsernameProblemLanguageResultExecution timeMemory
1176715discontinuousGarage (IOI09_garage)C++20
100 / 100
1 ms400 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define pb push_back

const ll MOD = 1e9 + 7;
ll n, m, k, a, b, c, d, x, y;

int main() {
    ios::sync_with_stdio(false);
    cout.tie(0); cin.tie(0);

    cin >> n >> m;

    vector<ll> parking(n);
    vector<ll> weights(m);
    
    for(int j = 0; j<n; j++) cin >> parking[j];
    for(int j = 0; j<m; j++) cin >> weights[j];

    // sort(parking.begin(), parking.end());

    ll tt = 2*m;

    ll totalEarnings = 0;
    queue<ll> carqueue;

    vector<bool> occupied(n, false);
    vector<ll> parked(m, -1);

    while(tt--) {
        int inp; cin >> inp;

        if(inp > 0) {
            bool done = false;
            for(int i = 0; i<n; i++) {
                if(occupied[i] == false) {
                    occupied[i] = true;
                    parked[inp-1] = i+1;
                    done = true;
                    totalEarnings += weights[inp-1] * parking[i];
                    break;
                }
            }

            if(done == false) {
                carqueue.push(inp);
            }
        }

        else {
            inp = (-1)*(inp);
            occupied[parked[inp-1]-1] = false;
            
            if(carqueue.empty() == false) {
                // cout << parked[inp-1]-1 << " " << weights[carqueue.front()-1] << " ";
                totalEarnings += parking[parked[inp-1]-1] * weights[carqueue.front()-1];
                occupied[parked[inp-1]-1] = true;
                parked[carqueue.front()-1] = parked[inp-1];
                carqueue.pop();
            }
        }

        // if(carqueue.empty() == false) cout << carqueue.front() << " ";
        // cout << totalEarnings << "\n";
    }

    cout << totalEarnings;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...