Submission #259206

#TimeUsernameProblemLanguageResultExecution timeMemory
259206SamAndLast supper (IOI12_supper)C++17
100 / 100
936 ms13808 KiB
#include "advisor.h" //#include "grader.h" #include <bits/stdc++.h> using namespace std; #define m_p make_pair #define fi first #define se second const int MAXN = 100005; void ComputeAdvice(int *C, int N, int K, int M) { int h[MAXN] = {}; int hl[MAXN] = {}; int u[MAXN] = {}; int d[MAXN] = {}; int ans[MAXN] = {}; bool ps[MAXN] = {}; bool p[MAXN] = {}; for (int i = 0; i < N; ++i) u[i] = N; for (int i = N - 1; i >= 0; --i) { h[i] = u[C[i]]; u[C[i]] = i; } set<int> s; for (int i = 0; i < K; ++i) s.insert(i); set<pair<int, int> > ss; for (int i = 0; i < K; ++i) ss.insert(m_p(u[i], i)); for (int i = 0; i < N; ++i) u[i] = -1; for (int i = 0; i < N; ++i) { hl[i] = u[C[i]]; u[C[i]] = i; } for (int i = 0; i < K; ++i) d[i] = i + 1; for (int i = 0; i < N; ++i) { if (s.find(C[i]) != s.end()) { if (hl[i] == -1) ps[C[i]] = true; else { p[hl[i]] = true; } ss.erase(m_p(i, C[i])); ss.insert(m_p(h[i], C[i])); continue; } int x = (--ss.end())->se; ss.erase((--ss.end())); ss.insert(m_p(h[i], C[i])); s.erase(x); s.insert(C[i]); ans[i] = d[x]; d[C[i]] = d[x]; } for (int i = 0; i < K; ++i) { WriteAdvice(ps[i]); } for (int i = 0; i < N; ++i) { WriteAdvice(p[i]); } return; int l = 0; while ((1 << l) < K) ++l; for (int i = 0; i < N; ++i) { if (ans[i] == 0) continue; --ans[i]; for (int j = 0; j < l; ++j) { if ((ans[i] & (1 << j))) WriteAdvice(1); else WriteAdvice(0); } } }
#include "assistant.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; void Assist(unsigned char *A, int N, int K, int R) { int d[MAXN] = {}; bool p[MAXN] = {}; int l = 0; while ((1 << l) < K) ++l; int j = 0; for (int i = 0; i < K; ++i) { d[i] = i; p[i] = A[j++]; } set<int> s; for (int i = 0; i < K; ++i) s.insert(i); for (int i = 0; i < N; ++i) { int x = GetRequest(); if (s.find(x) != s.end()) { for (int u = 0; u < K; ++u) { if (d[u] == x) { p[u] = A[j++]; break; } } continue; } for (int u = 0; u < K; ++u) { if (!p[u]) { s.erase(d[u]); s.insert(x); PutBack(d[u]); d[u] = x; p[u] = A[j++]; break; } } } }
#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...