제출 #410082

#제출 시각아이디문제언어결과실행 시간메모리
410082dreezyThe Big Prize (IOI17_prize)C++17
20 / 100
1 ms288 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; /*********************************************************************************************************************/ int find_best(int n) { int curtotal = -1; for(int i =0; i<10; i++){ vector<int> res= ask(n/10 *i); if( !res[0] && !res[1]) return n/10 *i; curtotal = max(curtotal,res[0] +res[1]); } int left = 0, right = n-1; int target =1; vector<bool> vis(n); int cnt =0; while(true){ int ind = (left +right) /2 ; //cout << left <<", "<<ind<<", "<<right<<": "<<target<<" "<<curtotal<<endl; vector<int> res = ask(ind); if(res[0] + res[1] == 0) return ind; if(res[0] + res[1] < curtotal){ int numvis = 1; res = ask(--ind); while(res[0]+ res[1] < curtotal){ if(res[0] + res[1] == 0) return ind; numvis++; --ind; //cout <<ind<<":"<<endl; if(ind <0){ target += numvis; break; } if(vis[ind]) { target+= numvis; break; } res = ask(ind); } if(res[0] + res[1] == curtotal){ target += res[0]+ numvis +1; left = ind+1; right = n-1; } } if(res[0] < target){ left = ind +1; } else{ right = ind - 1; } cnt++; if(cnt >=20) break; } return 0; } /*********************************************************************************************************************/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...