Submission #422924

#TimeUsernameProblemLanguageResultExecution timeMemory
422924QCFiumKoala Game (APIO17_koala)C++14
37 / 100
107 ms336 KiB
#include <bits/stdc++.h> #include "koala.h" int minValue(int n, int w) { int query[n]; for (int i = 0; i < n; i++) query[i] = !i; int response[n]; playRound(query, response); for (int i = 0; i < n; i++) if (response[i] <= query[i]) return i; assert(0); } std::random_device rnd_dev; std::mt19937 rnd(rnd_dev() ^ clock()); int maxValue(int n, int w) { std::vector<int> cands(n); std::iota(cands.begin(), cands.end(), 0); std::shuffle(cands.begin(), cands.end(), rnd); while (cands.size() >= 8) { int one = w / cands.size(); int query[n]; memset(query, 0, sizeof(query)); for (auto i : cands) query[i] = one; int response[n]; playRound(query, response); std::vector<int> next; for (auto i : cands) if (response[i] > query[i]) next.push_back(i); assert(next.size()); cands = next; } return cands[0]; } int greaterValue(int n, int w) { auto go = [&] (int k) { int query[n]; memset(query, 0, sizeof(query)); query[0] = query[1] = k - 1; int response[n]; playRound(query, response); if ((query[0] < response[0]) < (query[1] < response[1])) return 1; if ((query[0] < response[0]) > (query[1] < response[1])) return 0; if (query[0] < response[0]) return -1; return -2; }; int t = go(2); if (t >= 0) return t; if (t == -1) { t = go(5); if (t >= 0) return t; if (t == -1) { t = go(9); if (t >= 0) return t; assert(0); } else { t = go(3); if (t >= 0) return t; assert(0); } } else { int query[n]; for (auto &i : query) i = 1; int response[n]; playRound(query, response); int tmp = -1; for (int i = 0; i < n; i++) if (response[i] > query[i]) tmp = i; memset(query, 0, sizeof(query)); query[tmp] = 1; playRound(query, response); int r0 = -1; for (int i = 0; i < n; i++) if (response[i] <= query[i]) r0 = i; query[tmp] = 2; playRound(query, response); int r1 = -1; for (int i = 0; i < n; i++) if (r0 != i && response[i] <= query[i]) r1 = i; if (r0 == 0) return 1; if (r0 == 1) return 0; if (r1 == 0) return 1; if (r1 == 1) return 0; assert(0); } } void allValues(int n, int w, int *p) { }
#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...