제출 #256262

#제출 시각아이디문제언어결과실행 시간메모리
256262AkashiLast supper (IOI12_supper)C++14
100 / 100
106 ms7152 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; void ComputeAdvice(int *C, int N, int K, int M) { vector <int> ap(N, N); vector <int> Next(N, N); for (int i = N - 1; i >= 0 ; --i) { Next[i] = ap[C[i]]; ap[C[i]] = i; } vector <bool> adv(M, 1); set <pair <int, int> > s; vector <bool> f(N, 0); for (int i = 0; i < K ; ++i) { s.insert({ap[i], i}); f[i] = 1; } for (int i = 0; i < N ; ++i) { if (f[C[i]] == 1) { set <pair <int, int> > :: iterator it = s.lower_bound({i, 0}); s.erase(it); } else { ///trebuie sa scot o culoare de pe paleta set <pair <int, int> > :: reverse_iterator it = s.rbegin(); adv[it->second] = 0; if (it->second < K) f[it->second] = 0; else f[C[it->second - K]] = 0; s.erase(*it); } f[C[i]] = 1; s.insert({Next[i], i + K}); } for (int i = 0; i < N + K ; ++i) WriteAdvice(adv[i]); return ; }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; void Assist(unsigned char *A, int N, int K, int R) { vector <bool> f(N, 0); vector <int> rec; int ind = 0; for (int i = 0; i < K ; ++i, ++ind) { if (A[ind] == 0) rec.push_back(i); f[i] = 1; } for (int i = 0; i < N ; ++i, ++ind) { int req = GetRequest(); if (!f[req]) { f[req] = 1; f[rec.back()] = 0; PutBack(rec.back()); rec.pop_back(); } if (A[ind] == 0) rec.push_back(req); } return ; } /** 4 2 65000 2 0 3 0 **/
#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...