Submission #1164749

#TimeUsernameProblemLanguageResultExecution timeMemory
1164749SmuggingSpunThe Big Prize (IOI17_prize)C++20
20 / 100
775 ms11428 KiB
#include<bits/stdc++.h> #include "prize.h" using namespace std; int find_best(int n) { vector<vector<int>>cnt(n, vector<int>(2, -1)); vector<int>used; auto id = [&] (int i){ if(cnt[i][0] != -1){ return cnt[i]; } used.emplace_back(i); return cnt[i] = ask(i); }; auto sum = [&] (int i){ return id(i)[0] + id(i)[1]; }; auto same = [&] (int i, int j){ return sum(i) == sum(j); }; int ans = -1; if(sum(0) == 0){ ans = 0; } else if(sum(n - 1) == 0){ ans = n - 1; } else{ function<void(int, int)>solve; solve = [&] (int l, int r){ if(l > r || ans != -1 || (same(l - 1, r + 1) && id(r + 1)[0] - id(l - 1)[0] == 0)){ return; } int L = 0, R = 0; for(int& x : used){ if(x <= r && sum(x) > sum(r + 1)){ R++; } if(x >= l && sum(x) > sum(l - 1)){ L++; } } if(id(l - 1)[1] == L || id(r + 1)[0] == R){ return; } int m = (l + r) >> 1; if(sum(m) == 0){ ans = m; } solve(l, m - 1); solve(m + 1, r); }; solve(1, n - 2); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...