Submission #316115

#TimeUsernameProblemLanguageResultExecution timeMemory
316115MrDominoThe Big Prize (IOI17_prize)C++14
20 / 100
86 ms384 KiB
#include <bits/stdc++.h> #include "prize.h" using namespace std; mt19937 rng((long long) (new char)); int rn(int l, int r) { return l + rng() % (r - l + 1); } int rep(int l, int r, int q) { assert(q >= 0); if (l > r || q == 0) { return 0; } int m = (l + r) / 2; int p1 = max(l, m - 5); int p2 = min(r, m + 5); if (q == 0) { return 0; } q--; vector<int> aprox = ask(m); if (aprox[0] == 0 && aprox[1] == 0) { return m; } for (int j = p1; j <= p2; j++) { if (j != m) { if (q == 0) { return 0; } q--; vector<int> v = ask(j); if (v[0] == 0 && v[1] == 0) { return j; } aprox[0] = min(aprox[0], v[0]); aprox[1] = min(aprox[1], v[1]); } } if (aprox[0] == 0) { return rep(p2 + 1, r, q); } if (aprox[1] == 0) { return rep(l, p1 - 1, q); } int c0 = (long long) aprox[0] * q / (aprox[0] + aprox[1]); int c1 = q - c0; int x = rep(l, p1 - 1, c0); if (x) { return x; } else { return rep(p2 + 1, r, c1); } } int find_best(int n) { return rep(0, n - 1, 9000 + 1000 - 8); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...