Submission #1082947

# Submission time Handle Problem Language Result Execution time Memory
1082947 2024-09-02T08:00:16 Z ajay Garage (IOI09_garage) C++14
100 / 100
1 ms 348 KB
/* Ajay Jadhav */
 
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <deque>
#include <vector>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <ctime>
#include <string.h>
#include <climits>
#include <cstring>
using namespace std;
 
 
#define ll          long long
#define pb          push_back
#define pii         pair<int,int>
#define vi          vector<int>
#define vii         vector<pii>
#define mi          map<int,int>
#define mii         map<pii,int>
#define all(a)      (a).begin(),(a).end()
#define x           first
#define y           second
#define sz(x)       (int)x.size()
#define hell        1000000007
#define rep(i,a,b)  for(int i=a;i<b;i++)
#define endl        '\n'
 
 
 
void solve()
{
    int n, m;
    cin >> n >> m;
    vi prices(n + 1), weights(m + 1);
    rep(i, 1, n + 1) {
        cin >> prices[i];
    } 

    rep(i, 1, m + 1) {
        cin >> weights[i];
    }
    
    int ans = 0;
    
    priority_queue<int, vi, greater<int>> available_spaces;
    map<int, int> occupied_spaces;
    queue<int> waiting;

    rep (i, 1, n + 1) {
        available_spaces.push(i);
    }
    

    rep(i, 0, 2 * m) {
        int x;
        cin >> x;
        if (x > 0) {
            // arrived... get smallest available space or push into waiting.
            if (!available_spaces.empty()) {
                int space = available_spaces.top();
                available_spaces.pop();
                occupied_spaces[x] = space;
                ans += weights[x] * prices[space];
            } else {
                waiting.push(x);
            }
        } else {
            int occupied_space = occupied_spaces[abs(x)];
            available_spaces.push(occupied_space);
            occupied_spaces.erase(abs(x));
            if (waiting.size() > 0) {
                occupied_spaces[waiting.front()] = available_spaces.top();
                ans += (weights[waiting.front()] * prices[available_spaces.top()]);
                available_spaces.pop();
                waiting.pop();
            }
        }
    }
    cout << ans << endl;
}
 
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    // cin>>t;
    while (t--)
    {
        solve();
    }
    return 0;
}

# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 1 ms 348 KB Output is correct
19 Correct 1 ms 344 KB Output is correct
20 Correct 1 ms 344 KB Output is correct