Submission #516183

#TimeUsernameProblemLanguageResultExecution timeMemory
516183600MihneaLast supper (IOI12_supper)C++17
100 / 100
218 ms17052 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; void ComputeAdvice(int *a, int n, int k, int ___) { vector<int> solution; vector<int> when(n); int tt = 0; vector<vector<int>> nxt(n, vector<int> (1, n + 1)); for (int i = n - 1; i >= 0; i--) { nxt[a[i]].push_back(i); } set<int> active_guys; set<pair<int, int>> nxt_time; for (int i = 0; i < k; i++) { active_guys.insert(i); nxt_time.insert({nxt[i].back(), i}); } for (int i = 0; i < k; i++) { when[i] = tt++; solution.push_back(0); } int rr = 0; for (int i = 0; i < n; i++) { assert((int) nxt_time.size() == k); if (!nxt_time.count({nxt[a[i]].back(), a[i]})) { auto it = nxt_time.end(); it--; int guy = it->second; nxt_time.erase(it); nxt_time.insert({nxt[a[i]].back(), a[i]}); rr++; } else { solution[when[a[i]]] = 1; } when[a[i]] = tt++; solution.push_back(0); nxt[a[i]].pop_back(); assert(nxt_time.count({i, a[i]})); nxt_time.erase({i, a[i]}); nxt_time.insert({nxt[a[i]].back(), a[i]}); } assert((int) nxt_time.size() == k); for (auto &x : solution) { WriteAdvice(x); } return; for (auto &x : solution) { cout << x << " "; } cout << "\n"; exit(0); WriteAdvice(0); WriteAdvice(1); WriteAdvice(2); }
#include "assistant.h" #include <bits/stdc++.h> using namespace std; void Assist(unsigned char *a, int n, int k, int r) { set<int> act, skip; int ptr = 0; for (int i = 0; i < k; i++) { act.insert(i); if (a[ptr++] == 0) { skip.insert(i); } } //cout << "\t\t\tstart\n"; for (int i = 0; i < n; i++) { int nxt = GetRequest(); if (!act.count(nxt)) { assert(!skip.empty()); int x = *skip.begin(); //cout << "\t\t\t" << i << " : " << nxt << ", give " << x << " : " << int(a[ptr]) << " : " << (int) skip.size() << "\n"; skip.erase(x); assert(act.count(x)); act.erase(x); act.insert(nxt); assert(ptr < r); if (a[ptr++] == 0) { skip.insert(nxt); } PutBack(x); } else { if (a[ptr++] == 0) { skip.insert(nxt); } } } //exit(0); return; /** int i; set<int> give; for (int i = ) for (i = 0; i < n; i++) { int req = GetRequest(); if (req >= k) PutBack(req % k); } **/ }

Compilation message (stderr)

advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:30:11: warning: unused variable 'guy' [-Wunused-variable]
   30 |       int guy = it->second;
      |           ^~~
#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...