Submission #386046

#TimeUsernameProblemLanguageResultExecution timeMemory
386046blueThe Big Prize (IOI17_prize)C++17
0 / 100
89 ms364 KiB
#include "prize.h" #include <vector> using namespace std; int nonlollipop = 0; int diamond_search(int a, int b, int L, int R) //extra non-lollipops on left and right { if(b < a) return -1; else if(nonlollipop - L - R == (b-a+1)) //a..b is completely filled with prizes { for(int i = a; i <= b; i++) { vector<int> A = ask(i); if(A[0] + A[1] == 0) return i; } return -1; } vector<int> A; int m; for(m = (a+b)/2; m <= b; m++) { A = ask(m); if(A[0] + A[1] == 0) return m; else if(A[0] + A[1] == nonlollipop) //m is a lollipop { return max( diamond_search(a, (a+b)/2-1, L, A[1]), diamond_search(m+1, b, A[0], R) ); } } return diamond_search(a, (a+b)/2-1, L, R + (b - (a+b)/2 + 1)); } int find_best(int n) { for(int i = 1; i <= min(500, n); i++) { vector<int> A = ask(i); nonlollipop = max(nonlollipop, A[0]+A[1]); } return diamond_search(0, n-1, 0, 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...