Submission #41865

#TimeUsernameProblemLanguageResultExecution timeMemory
41865rahasiaThe Big Prize (IOI17_prize)C++14
20 / 100
7 ms2020 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; #define repU(x, y) for(int i = x; i <= y; ++i) #define mp make_pair #define pb push_back #define allV(x) x.begin(), x.end() #define fi first #define se second typedef long long LL; typedef vector< int > vi; typedef vector< vi > vvi; typedef pair< int, int > pii; typedef vector< pii > vpii; typedef vector< LL > vL; typedef vector< vL > vvL; typedef vector< bool > vb; // GLOBAL int SUM = -1; // -- int foo(int le, int ri, int BL, int BR) { if (le == ri) return le; int mid1 = (le + ri) / 2, mid2 = mid1+1, allL = 0, allR = 0; vi tmp = ask(mid1); allL = tmp[0] - BL; while (tmp[0] + tmp[1] != SUM && le <= mid1) { if (tmp[0] == 0 && tmp[1] == 0) return mid1; if (le > mid1-1) break; --mid1; tmp = ask(mid1); allL = tmp[0] - BL; } if (mid2 <= ri) { tmp = ask(mid2); allR = tmp[1] - BR; } while (tmp[0] + tmp[1] != SUM && mid2 <= ri) { if (tmp[0] == 0 && tmp[1] == 0) return mid2; if (mid2 + 1 > ri) break; ++mid2; tmp = ask(mid2); allR = tmp[1] - BR; } int res = -1; if (le <= mid1-1 && allL > 0) { tmp = ask(mid1-1); res = foo(le, mid1-1, BL, tmp[1]); if (res != -1) return res; } if (mid2+1 <= ri && allR > 0) { tmp = ask(mid2+1); res = foo(mid2+1, ri, tmp[0], BR); if (res != -1) return res; } return res; } int find_best(int n) { if (n <= 5000) { vi tmp; repU(0, n-1) { tmp = ask(i); if (tmp[0] == 0 && tmp[1] == 0) return i; } return -1; } else { vi tmp; repU(0, 450) { tmp = ask(i); if (tmp[0] == 0 && tmp[1] == 0) return i; SUM = max(SUM, tmp[0] + tmp[1]); } return foo(451, n-1, 0, 0); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...