제출 #63017

#제출 시각아이디문제언어결과실행 시간메모리
63017SpaimaCarpatilor최후의 만찬 (IOI12_supper)C++17
100 / 100
140 ms24872 KiB
#include "advisor.h" #include<bits/stdc++.h> using namespace std; static int lst[100009], nxt[100009], realVal[200009]; static bool ap[100009], ans[200009]; static priority_queue < pair < int, int > > PQ; void ComputeAdvice(int *C, int N, int K, int M) { for (int i=0; i<N; i++) lst[i] = N + 1; for (int i=N - 1; i>=0; i--) { nxt[i] = lst[C[i]]; lst[C[i]] = i; } for (int i=0; i<K; i++) PQ.push ({lst[i], i}), realVal[i] = lst[i], ap[i] = 1; for (int i=0; i<N; i++) { if (ap[C[i]] == 1) { PQ.push ({nxt[i], i + K}); realVal[i + K] = nxt[i]; continue; } pair < int, int > curr; int currC; while (1) { curr = PQ.top (); PQ.pop (); if (curr.second < K) currC = curr.second; else currC = C[curr.second - K]; if (realVal[curr.second] == curr.first && ap[currC] == 1) break; } ap[currC] = 0, ans[curr.second] = 1; ap[C[i]] = 1, PQ.push ({nxt[i], i + K}); realVal[i + K] = nxt[i]; } for (int i=0; i<N + K; i++) WriteAdvice (ans[i]); }
#include "assistant.h" #include<bits/stdc++.h> using namespace std; static bool ap[100009], dispensable[100009]; static queue < int > canDispense; void Assist(unsigned char *A, int N, int K, int R) { for (int i=0; i<K; i++) { ap[i] = 1, dispensable[i] = A[i]; if (dispensable[i]) canDispense.push (i); } for (int i = 0; i < N; i++) { int req = GetRequest(); if (ap[req]) { if (A[K + i]) dispensable[req] = 1, canDispense.push (req); continue; } assert (!canDispense.empty ()); { int c = canDispense.front (); canDispense.pop (); ap[c] = 0; PutBack (c); } if (A[K + i]) dispensable[req] = ap[req] = 1, canDispense.push (req); else ap[req] = 1; } }
#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...