제출 #808486

#제출 시각아이디문제언어결과실행 시간메모리
808486thimote75코알라 (APIO17_koala)C++14
19 / 100
10 ms324 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; using di = pair<int, int>; using vd = vector<di>; using idata = vector<int>; using bdata = vector<bool>; const int MAXN = 100; int R[MAXN], B[MAXN]; bdata defaultExclusion(MAXN, false); idata playRound (vd V, bdata &exclusion) { for (int i = 0; i < MAXN; i ++) B[i] = 0; for (const auto &x : V) B[x.first] = x.second; playRound(B, R); idata answer; for (int i = 0; i < MAXN; i ++) if (B[i] < R[i] && !exclusion[i]) answer.push_back(i); return answer; } vd fill (idata values, int count) { vd answer; for (int u : values) answer.push_back({ u, count }); return answer; } int minValue(int N, int W) { idata result = playRound({ { 0, 1 } }, defaultExclusion); int answer = -1; for (int i = 0; i < N; i ++) if (R[i] == 0) answer = i; return answer; } int maxValue(int N, int W) { idata answer(N); iota(answer.begin(), answer.end(), 0); bdata exclusion(N); idata firstSubset = playRound(fill( answer, 1 ), exclusion); for (int i = 0; i < N; i ++) exclusion[i] = true; for (int u : firstSubset) exclusion[u] = false; idata secondSubset = playRound(fill( firstSubset, N / firstSubset.size()), exclusion); for (int i = 0; i < N; i ++) exclusion[i] = true; for (int u : secondSubset) exclusion[u] = false; idata thirdSubset = playRound(fill( secondSubset, N / secondSubset.size()), exclusion); for (int i = 0; i < N; i ++) exclusion[i] = true; for (int u : thirdSubset) exclusion[u] = false; idata fourthSubset = playRound(fill( thirdSubset, N / thirdSubset.size()), exclusion); for (int i = 0; i < N; i ++) exclusion[i] = true; for (int u : fourthSubset) exclusion[u] = false; if (fourthSubset.size() != 0) return fourthSubset[0]; if (thirdSubset .size() != 0) return thirdSubset [0]; if (secondSubset.size() != 0) return secondSubset[0]; return firstSubset[0]; } int greaterValue(int N, int W) { bdata exclusion(N, true); exclusion[0] = false; exclusion[1] = false; int a = 0; int b = 8; while (b - a > 1) { int c = (a + b) >> 1; idata ans = playRound({ {0, c}, {0, c} }, exclusion); if (ans.size() == 0) return ans[0]; if (ans.size() == 2) b = c; else a = c; } return 0; } void allValues(int N, int W, int *P) { if (W == 2*N) { // TODO: Implement Subtask 4 solution here. // You may leave this block unmodified if you are not attempting this // subtask. } else { // TODO: Implement Subtask 5 solution here. // You may leave this block unmodified if you are not attempting this // subtask. } }
#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...