제출 #61266

#제출 시각아이디문제언어결과실행 시간메모리
61266aome최후의 만찬 (IOI12_supper)C++17
0 / 100
221 ms26792 KiB
#include <bits/stdc++.h> #include "advisor.h" using namespace std; const int maxn = 200005; int f1[maxn], f2[maxn], f3[maxn]; bool del[maxn]; void ComputeAdvice(int *C, int N, int K, int M) { for (int i = 0; i < N; ++i) f1[i] = N; for (int i = N - 1; i >= 0; --i) { f2[i] = f1[C[i]], f1[C[i]] = i; } for (int i = 0; i < K; ++i) f2[i + N] = f1[i]; set< pair<int, int> > s; for (int i = 0; i < N; ++i) f3[i] = -1; for (int i = 0; i < K; ++i) { f3[i] = i + N, s.insert({f2[i + N], i + N}); } for (int i = 0; i < N; ++i) { int &tmp = f3[C[i]]; set< pair<int, int> > :: iterator it; if (tmp == -1) { it = --s.end(); int p = it -> second; del[p] = 1; if (p > N) f3[p - N] = -1; else f3[C[p]] = -1; } else { it = s.find({f2[tmp], tmp}); assert(it != s.end()); } s.erase(it); tmp = i; s.insert({f2[i], i}); } for (auto i : s) del[i.second] = 1; for (int i = 0; i < N + K; ++i) WriteAdvice(del[i]); }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; void Assist(unsigned char *A, int N, int K, int R) { set<int> s1, s2; for (int i = 0; i < K; ++i) { s1.insert(i); if (A[i + N]) s2.insert(i); } for (int i = 0; i < N; ++i) { int tmp = GetRequest(); if (s1.find(tmp) == s1.end()) { int p = *s2.begin(); assert(s1.find(p) != s1.end()); s1.erase(p), s2.erase(p); PutBack(p); s1.insert(tmp); } if (A[i]) s2.insert(i); } }
#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...