Submission #70063

#TimeUsernameProblemLanguageResultExecution timeMemory
70063E869120The Big Prize (IOI17_prize)C++14
20 / 100
96 ms1780 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; vector<int>vec;int N; pair<int,int> asks(int p){ vector<int>Z = ask(p); return make_pair(Z[0],Z[1]); } int find_best(int n) { srand((unsigned)time(NULL)); N=n; vector<int>vec;for(int i=0;i<n;i++) vec.push_back(i); while(vec.size()>=2){ int minx=0; if(vec.size()>=30){ for(int i=0;i<5;i++){ pair<int,int>A=asks(vec[rand()%vec.size()]); minx=max(minx,A.first+A.second); } } else{ for(int i=0;i<vec.size();i++){ pair<int,int>A=asks(vec[i]); minx=max(minx,A.first+A.second); } } int s = 0;for(int i=0;i<20;i++){if((1<<i)<=vec.size()) s=i+1;} int cnt=0,ret=0;vector<int>vec2; while(true){ int c = 0; for(int i=s-1;i>=0;i--){ int pos = vec[min(c + (1<<i), (int)vec.size() - 1)]; if(pos <= ret) c += (1<<i); else{ pair<int,int>Z = asks(pos); if(Z.first+Z.second==minx && Z.first<=cnt) c+=(1<<i); } } if(c==(1<<s)-1){ break; } else{ // results = vec[c + 1] if(c == 0){ int pos = vec[0]; pair<int, int> Z = asks(pos); if(Z.first + Z.second != minx) c = -1; } vec2.push_back(vec[c + 1]); ret = vec[c + 1]; } cnt++; } vec=vec2; } return vec[0]; }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:26:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<vec.size();i++){
                ~^~~~~~~~~~~
prize.cpp:32:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   int s = 0;for(int i=0;i<20;i++){if((1<<i)<=vec.size()) s=i+1;}
                                      ~~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...