Submission #73344

#TimeUsernameProblemLanguageResultExecution timeMemory
73344SmsSThe Big Prize (IOI17_prize)C++17
0 / 100
113 ms436 KiB
#include<bits/stdc++.h> using namespace std; #define for2(a,b,c) for(int a = b; a < c; a++) #include "prize.h" const bool test = 0; int mn; int solve(int l,int r,vector<int> L,vector<int> R){ // cout << l << ' ' << r << endl; if(l >= r) return -1; if(L[1]-R[1] == (r-l-1)) return -1; int mid = (l+r)/2; vector<int> MIDL,MIDR; int midl; int midr; midl = midr = mid; midr++; while(1){ MIDL = ask(midl); if(MIDL[0]+MIDL[1] == 0) return midl; if(MIDL[0]+MIDL[1] != mn){ midl--; }else break; } while(1){ MIDR = ask(midr); if(MIDR[0]+MIDR[1] == 0) return midr; if(MIDR[0]+MIDR[1] != mn){ midr++; }else break; } int res; res = solve(l,midl,L,MIDL); if(res == -1) return solve(midr,r,MIDR,R); else return res; } int find_best(int n) { if(!test && n <= 5000){ for2(i,0,n){ vector<int> res = ask(i); if(res[0]+res[1] == 0) return i; } } mn = 0; srand(14); for2(rep,0,10){ vector<int> res = ask(rand()%n); mn = max(mn,res[0]+res[1]); } int l,r; vector<int> L,R; for2(i,0,n){ l = i; L = ask(i); if(L[0]+L[1] == mn){ break; } if(L[0]+L[1] == 0) return i; } for(int i = n-1; i >= 0; i--){ r = i; R = ask(i); if(R[0]+R[1] == mn){ break; } if(R[0]+R[1] == 0) return i; } return solve(l,r,L,R); }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:73:22: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
  return solve(l,r,L,R);
                      ^
prize.cpp:73:22: warning: 'l' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...