Submission #973074

#TimeUsernameProblemLanguageResultExecution timeMemory
973074FriggletGarage (IOI09_garage)C++14
100 / 100
2 ms600 KiB
#include <algorithm> #include <iostream> #include <vector> #include <numeric> #include <utility> #include <set> #include <unordered_map> #include <cmath> #include <string.h> #include <cctype> #include <string> using namespace std; using ll = long long; int main(){ ll n, m; cin >> n >> m; ll rs, wk; ll a; vector<ll> rates; vector<ll> weights; vector<ll> occupied; unordered_map<ll,ll> spacemem; vector<ll> queue; for(int i=0; i<n; i++){ occupied.push_back(0); } ll totalsum=0; ll counter=0; bool occupation=false; for(int i=0; i<n; i++){ cin >> rs; rates.push_back(rs); } for(int i=0; i<m; i++){ cin >> wk; weights.push_back(wk); } for(int i=0; i<m*2; i++){ cin >> a; occupation = false; counter = 0; if(a>0){ while(occupation==false){ if(counter==n){ queue.push_back(a-1); occupation=true; } else if(occupied[counter]==0){ occupation = true; occupied[counter]=1; spacemem[a-1]=counter; } else{ counter++; } } if(counter<n){ totalsum += rates[counter]*weights[a-1]; } } else{ if(queue.size()>0){ const auto leaving = abs(a) - 1; const auto coming = queue[0]; totalsum += rates[spacemem[leaving]] * weights[coming]; spacemem[queue[0]]=spacemem[abs(a)-1]; queue.erase(queue.begin()); } else{ occupied[spacemem[abs(a)-1]]=0; } } } cout << totalsum; }
#Verdict Execution timeMemoryGrader output
Fetching results...