제출 #274814

#제출 시각아이디문제언어결과실행 시간메모리
274814Saboon최후의 만찬 (IOI12_supper)C++14
0 / 100
342 ms9712 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int last[maxn], nex[maxn]; bool mark[maxn], Good[2*maxn]; void ComputeAdvice(int *C, int N, int K, int M) { set<pair<int,int>> S; memset(last, 63, sizeof last); for (int i = N-1; i >= 0; i--){ nex[i] = last[C[i]]; last[C[i]] = i; } for (int i = 0; i < K; i++){ S.insert({-last[i], -(i+1)}); mark[i] = 1; } for (int i = 0; i < N; i++){ if (mark[C[i]]){ auto it = S.lower_bound(make_pair(-i,-maxn)); int idx = (*it).second; cout << idx << " -> " << 1 << endl; if (idx < 0) Good[-(idx+1)] = 1; else Good[idx+K] = 1; S.erase(it); S.insert({-nex[i], i}); } else{ auto it = S.begin(); int idx = (*it).second; cout << idx << " -> " << 0 << endl; if (idx < 0){ Good[-(idx+1)] = 0; mark[-(idx+1)] = 0; } else{ Good[idx+K] = 0; mark[C[idx]] = 0; } S.erase(it); mark[C[i]] = 1; S.insert({-nex[i], i}); } } for (int i = 0; i < N+K; i++) cout << (char)(Good[i]+'0'); cout << endl; for (int i = 0; i < N+K; i++) WriteAdvice((char)(Good[i]+'0')); }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; const int maxn = 1e5 + 10; bool mark2[maxn]; int C[maxn]; void Assist(unsigned char *A, int N, int K, int R) { set<int> Bad; for (int i = 0; i < K; i++) if (A[i] == '0') Bad.insert(i); for (int i = 0; i < N; i++) { int req = GetRequest(); C[i] = req; if (mark2[req]){ if (A[i+K] == '0') Bad.insert(C[i]); continue; } assert(!Bad.empty()); int idx = *Bad.begin(); PutBack(idx); mark2[idx] = 0; mark2[C[i]] = 1; Bad.erase(Bad.begin()); } }
#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...