Submission #977390

#TimeUsernameProblemLanguageResultExecution timeMemory
977390mariaclaraThe Big Prize (IOI17_prize)C++17
20 / 100
52 ms2136 KiB
#include "prize.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define mk make_pair #define pb push_back #define fr first #define sc second int find_best(int n) { int i = 0, at = 0, lolipop = 0; vector<pii> resp(n, mk(-1,-1)); for(int i = 0; i < min(450,n); i++) { vector<int> aux = ask(i); resp[i] = {aux[0],aux[1]}; lolipop = max(lolipop, aux[0] + aux[1]); } while(i < n) { // achar primeiro cara mais valioso doq um pirulito de indice maior que i int l = i, r = n-1; while(l <= r) { int mid = (l+r)/2; vector<int> aux; if(resp[mid] == mk(-1,-1)) aux = ask(mid), resp[mid] = {aux[0],aux[1]}; else aux = {resp[mid].fr}; if(aux[0] > at) r = mid-1; else l = mid+1; } while(r+1 < n) { vector<int> aux; if(resp[r+1] == mk(-1,-1)) aux = ask(r+1), resp[r+1] = {aux[0], aux[1]}; else aux = {resp[r+1].fr, resp[r+1].sc}; if(resp[r+1].fr + resp[r+1].sc == lolipop) break; r++; } i = r; while(i >= 0) { vector<int> aux; if(resp[i] == mk(-1,-1)) aux = ask(i), resp[i] = {aux[0], aux[1]}; else aux = {resp[i].fr, resp[i].sc}; if(aux[0] + aux[1] == 0) return i; if(aux[0] + aux[1] == resp[r+1].fr + resp[r+1].sc or aux[0] == 0) break; i--; } i = r+1; at = resp[r+1].fr; } }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:18:31: warning: control reaches end of non-void function [-Wreturn-type]
   18 |  vector<pii> resp(n, mk(-1,-1));
      |                               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...