Submission #778624

#TimeUsernameProblemLanguageResultExecution timeMemory
778624benjaminkleynThe Big Prize (IOI17_prize)C++17
0 / 100
77 ms344 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; #define mp make_pair bool asked[200000] = {false}; int L[200000], R[200000]; int v, N; bool Ask(int i) { if (asked[i]) return L[i] + R[i] == 0; asked[i] = true; vector<int> res = ask(i); L[i] = res[0], R[i] = res[1]; return L[i] + R[i] == 0; } int Find(int l, int r) { if (Ask(l)) return l; while (l < r && L[l] + R[l] != L[v] + R[v]) if (Ask(++l)) return l; if (Ask(r)) return r; while (l < r && L[r] + R[r] != R[v] + R[v]) if (Ask(--r)) return r; int m = (l + r) / 2; if (Ask(m)) return m; if (L[r] - L[l] == 0) return -1; int x = Find(l, m); if (x >= 0) return x; int y = Find(m, r); if (y >= 0) return y; return -1; } int find_best(int n) { N = n, v = 0; for (int j = 0; j < n && j < 500; j++) { if (Ask(j)) return j; if (L[j] + R[j] > L[v] + R[v]) v = j; } return Find(0, n - 1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...