Submission #869532

#TimeUsernameProblemLanguageResultExecution timeMemory
869532velislavgarkov커다란 상품 (IOI17_prize)C++14
20 / 100
45 ms1952 KiB
#include "prize.h" #include <iostream> using namespace std; vector <int> a; int maxs; int cur[512]; int find_prize(int l, int r, int bigl, int bigr) { int mid=(l+r)/2; int s=0; while (mid<=r) { a=ask(mid); if (a[0]+a[1]==0) return mid; if (a[0]+a[1]==maxs) break; s++; mid++; } int ans=-1; if (mid==r+1) { mid=(l+r)/2-1; while (mid>=l) { a=ask(mid); if (a[0]+a[1]==0) return mid; if (a[0]+a[1]==maxs) break; mid--; } if (mid>=l && a[0]>=bigl) { ans=find_prize(l,mid-1,bigl,a[0]); if (ans!=-1) return ans; } } else { if (a[0]+1<=bigr) { ans=find_prize(mid+1,r,a[0]+1,bigr); if (ans!=-1) return ans; } if (a[0]-s>=bigl) { ans=find_prize(l,(l+r)/2-1,bigl,a[0]-s); if (ans!=-1) return ans; } } return ans; } int find_best(int n) { for (int i=0;i<500;i++) { a=ask(i); if (a[0]+a[1]==0) return i; maxs=max(maxs,a[0]+a[1]); cur[i]=a[0]+a[1]; } int cnt=0; for (int i=0;i<500;i++) if (cur[i]!=maxs) cnt++; int ans=find_prize(0,n-1,1,maxs); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...