Submission #440529

#TimeUsernameProblemLanguageResultExecution timeMemory
440529prvocisloLast supper (IOI12_supper)C++17
100 / 100
199 ms9756 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; const pair<int, int> nic = {-1, -1}; void ComputeAdvice(int *c, int n, int k, int m) // pole requestov, |c| = pocet farieb, velkost palety, max pocet otazok { vector<int> up(n+k, 0), a(n+k), lst(n, 1e9), nxt(n+k, 1e9); for (int i = 0; i < k; i++) a[i] = i; for (int i = 0; i < n; i++) a[i+k] = c[i]; for (int i = n+k-1; i >= 0; i--) { nxt[i] = lst[a[i]]; lst[a[i]] = i; } set<pair<int, int>, greater<pair<int, int> > > s; // {nabuduce, kedy som to tam vlozila} vector<pair<int, int> > val(n, nic); // hodnota ktoru tato farba vlozila do setu for (int i = 0; i < k; i++) val[i] = {nxt[i], i}, s.insert(val[i]); for (int i = k; i < n+k; i++) { if (val[a[i]].first != -1) // tato farba urcite je na leseni a preto doteraz bola na hornej policke { s.erase(val[a[i]]); up[val[a[i]].second] = true; } else // nemame ju na leseni, musime nieco vyhodit { pair<int, int> p = *s.begin(); s.erase(s.begin()); val[a[p.second]] = nic; } val[a[i]] = {nxt[i], i}; s.insert(val[a[i]]); } for (int i = 0; i < n+k; i++) WriteAdvice(up[i]); }
#include "assistant.h" #include <bits/stdc++.h> using namespace std; void Assist(unsigned char *a, int n, int k, int r) { set<int> up, dw; for (int i = 0; i < k; i++) { if (a[i]) up.insert(i); else dw.insert(i); } for (int i = k; i < n+k; i++) { int c = GetRequest(); if (up.count(c)) { up.erase(c); } else { PutBack(*dw.begin()); dw.erase(dw.begin()); } if (a[i]) up.insert(c); else dw.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...