Submission #502240

#TimeUsernameProblemLanguageResultExecution timeMemory
502240blueLast supper (IOI12_supper)C++17
100 / 100
172 ms8680 KiB
#include "advisor.h" #include <deque> #include <vector> #include <set> #include <iostream> using namespace std; using vi = vector<int>; void ComputeAdvice(int *C, int N, int K, int M) { vi curr(N, N); vi nxt(N, 0); for(int i = N-1; i >= 0; i--) { nxt[i] = curr[C[i]]; curr[C[i]] = i; } set<pair<int, int> > scaffold; for(int c = 0; c < K; c++) scaffold.insert({curr[c], c}); vi removed(N+K, 1); vi prv(N, -1); for(int c = 0; c < K; c++) prv[c] = c; for(int i = 0; i < N; i++) { if(scaffold.find({curr[C[i]], C[i]}) != scaffold.end()) { scaffold.erase({curr[C[i]], C[i]}); curr[C[i]] = nxt[curr[C[i]]]; scaffold.insert({curr[C[i]], C[i]}); // if(prv[C]) removed[prv[C[i]]] = 0; } else { int z = scaffold.rbegin()->second; scaffold.erase({curr[z], z}); curr[C[i]] = nxt[curr[C[i]]]; scaffold.insert({curr[C[i]], C[i]}); // cerr << "remove\n"; } prv[C[i]] = K+i; } // cerr << "advice = "; // for(int v = 0; v < N+K; v++) cerr << removed[v] << ' '; // cerr << '\n'; for(int i = 0; i < N+K; i++) WriteAdvice(removed[i]); }
#include "assistant.h" #include <set> #include <iostream> using namespace std; void Assist(unsigned char *A, int N, int K, int R) { set<int> good, bad; for(int i = 0; i < K; i++) { if(A[i]) bad.insert(i); else good.insert(i); } for(int i = 0; i < N; i++) { int c = GetRequest(); if(good.find(c) == good.end() && bad.find(c) == bad.end()) { int r = *bad.begin(); bad.erase(r); PutBack(r); } good.erase(c); bad.erase(c); if(A[i+K]) bad.insert(c); else good.insert(c); } }
#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...