제출 #58461

#제출 시각아이디문제언어결과실행 시간메모리
58461kingpig9최후의 만찬 (IOI12_supper)C++11
0 / 100
237 ms26304 KiB
#include <bits/stdc++.h> #include "advisor.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; static const int MAXN = 1e5 + 10; //#define debug(...) fprintf(stderr, __VA_ARGS__) #define debug(...) #define fi first #define se second #define all(v) (v).begin(), (v).end() #define fillchar(a, s) memset((a), (s), sizeof(a)) #warning static (advisor) static int *C, N, K, M; vector<int> req[MAXN], rem[MAXN]; bool has[MAXN]; void ComputeAdvice (int *ccc, int nnn, int kkk, int mmm) { C = ccc; N = nnn; K = kkk; M = mmm; for (int i = 0; i < N; i++) { req[C[i]].push_back(i); } for (int i = 0; i < N; i++) { req[i].push_back(N); } priority_queue<pii> pq; //pii(next request, id) for (int i = 0; i < K; i++) { pq.push(pii(req[i][0], i)); has[i] = true; } //there are 2 shelves //one of them: x will be rem before x is requested again. //best to rem if it's not going to be requested again. //so the color is currently here //there is some time where it will be requested again. //Is it bound to have a removal before this? vector<int> ans; for (int i = 0; i < N; i++) { int x = C[i]; if (has[x]) { ans.push_back(N); //rem N - useless } else { int id = pq.top().se; pq.pop(); rem[id].push_back(i); ans.push_back(id); has[id] = false; has[x] = true; pq.push(pii(*upper_bound(all(req[x]), i), x)); } } for (int i = 0; i < N; i++) { rem[i].push_back(N); } for (int i = 0; i < N; i++) { int col = C[i]; auto it = upper_bound(all(req[col]), i); int nxtreq; if (it == req[col].end()) { //never requested again nxtreq = N + 1; } else { nxtreq = *it; } //when will it be removed? it = upper_bound(all(rem[col]), nxtreq); bool msg; if (it == rem[col].begin()) { //there is no removal msg = 1; } else { //there might be a removal it--; if (*it > i) { //there is a removal msg = 0; } else { //there is no removal msg = 1; } } WriteAdvice(msg); } }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; static const int MAXN = 1e5 + 10; #define debug(...) fprintf(stderr, __VA_ARGS__) //#define debug(...) #define fi first #define se second #define all(v) (v).begin(), (v).end() #define fillchar(a, s) memset((a), (s), sizeof(a)) #warning static (assistant) static unsigned char *A; static int N, K; static int cur[MAXN]; static bool has[MAXN]; static void go() { priority_queue<pii> pq; for (int i = 0; i < K; i++) { cur[i] = i; has[i] = true; pq.emplace(A[i], i); } A += K; for (int i = 0; i < N; i++) { //replace it with this int req = GetRequest(); if (has[req]) { continue; } int ind = pq.top().se; int &ref = cur[ind]; //debug("REF %d\n", ref); PutBack(ref); has[ref] = false; pq.pop(); ref = req; pq.emplace(A[i], ind); has[req] = true; } } void Assist (unsigned char *aaa, int nnn, int kkk, int rrr) { A = aaa; N = nnn; K = kkk; go(); }

컴파일 시 표준 에러 (stderr) 메시지

advisor.cpp:17:2: warning: #warning static (advisor) [-Wcpp]
 #warning static (advisor)
  ^~~~~~~

assistant.cpp:17:2: warning: #warning static (assistant) [-Wcpp]
 #warning static (assistant)
  ^~~~~~~
#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...