Submission #370299

#TimeUsernameProblemLanguageResultExecution timeMemory
370299dooweyThe Big Prize (IOI17_prize)C++14
97.42 / 100
77 ms748 KiB
#include <bits/stdc++.h> #include "prize.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair map<int,pii> res; pii get(int x){ if(res.count(x)) return res[x]; vector<int> g = ask(x); res[x] = mp(g[0], g[1]); return mp(g[0],g[1]); } int low = 0; int n; int solve(int li, int ri, int know){ if(li > ri || know == 0) return -1; pii ash = get(li); if(ash.fi + ash.se == 0) return li; if(li == ri) return -1; int mid = (li + ri + 1) / 2; pii qad = get(mid); if(qad.fi + qad.se == 0) return mid; if(qad.fi + qad.se == low){ int fa = solve(li, mid - 1, ash.se - qad.se); if(fa != -1) return fa; int fb = solve(mid, ri, know - (ash.se - qad.se)); return fb; } int cic = know; int nw = mid; int inb = 0; while(nw <= ri){ qad = get(nw); if(qad.fi + qad.se == 0) return nw; if(qad.fi + qad.se < low){ nw ++ ; inb ++ ; } else{ break; } } int fa = solve(li, mid - 1,ash.se - qad.se - inb); if(fa != -1) return fa; return solve(nw, ri, know - (ash.se - qad.se)); } int find_best(int _n) { n = _n; pii cur; for(int i = 0 ; i < min(n,500); i ++ ){ cur = get(i); if(cur.fi + cur.se == 0) return i; low = max(low, cur.fi + cur.se); } int lef = 0, rig = n - 1; while(1){ pii cc = get(lef); if(cc.fi + cc.se == 0) return lef; if(cc.fi + cc.se != low) lef ++ ; else break; } cur = get(lef); return solve(lef, n - 1, cur.se); }

Compilation message (stderr)

prize.cpp: In function 'int solve(int, int, int)':
prize.cpp:38:9: warning: unused variable 'cic' [-Wunused-variable]
   38 |     int cic = know;
      |         ^~~
prize.cpp: In function 'int find_best(int)':
prize.cpp:66:18: warning: unused variable 'rig' [-Wunused-variable]
   66 |     int lef = 0, rig = n - 1;
      |                  ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...