Submission #653584

#TimeUsernameProblemLanguageResultExecution timeMemory
653584coding_snorlaxCounting Mushrooms (IOI20_mushrooms)C++14
75.59 / 100
12 ms364 KiB
#include "mushrooms.h" #include<bits/stdc++.h> using namespace std; int count_mushrooms(int n){ int answer=0; vector<int> s={0}; vector<int> A={0}; vector<int> B; if(n<=200){ for(int i=1;i<min(n,200);i++){ s.push_back(i); if(use_machine(s)) B.push_back(i); else A.push_back(i); s.pop_back(); } return (int)A.size(); } else{ s.push_back(1); if(use_machine(s)) B.push_back(1); else A.push_back(1); s.pop_back(); s.push_back(2); if(use_machine(s)) B.push_back(2); else A.push_back(2); s.pop_back(); s.push_back(3); if(use_machine(s)) B.push_back(3); else A.push_back(3); if((int)A.size()>=2){ vector<int> Out1; for(int i=4;i<200;i+=2){ Out1.clear(); Out1.push_back(i); Out1.push_back(A[0]); Out1.push_back(i+1); Out1.push_back(A[1]); int num=use_machine(Out1); if(num==0){ A.push_back(i); A.push_back(i+1); } if(num==1){ B.push_back(i); A.push_back(i+1); } if(num==2){ A.push_back(i); B.push_back(i+1); } if(num==3){ B.push_back(i); B.push_back(i+1); } } } else{ vector<int> Out1; for(int i=4;i<200;i+=2){ Out1.clear(); Out1.push_back(i); Out1.push_back(B[0]); Out1.push_back(i+1); Out1.push_back(B[1]); int num=use_machine(Out1); if(num==3){ A.push_back(i); A.push_back(i+1); } if(num==2){ B.push_back(i); A.push_back(i+1); } if(num==1){ A.push_back(i); B.push_back(i+1); } if(num==0){ B.push_back(i); B.push_back(i+1); } } } } answer=(int)A.size(); vector<int> Out; int Mark=0; if(A.size()>=100){ for(int i=0;i<100;i++){ Out.push_back(A[i]); Out.push_back(-1); } } else{ for(int i=0;i<100;i++){ Out.push_back(B[i]); Out.push_back(-1); } Mark=1; } for(int i=0;i<(n-200)/100;i++){ for(int j=0;j<100;j++){ Out[2*j+1]=200+100*i+j; } int num=use_machine(Out); if(Mark && num%2){ answer++; answer+=num/2; } else if(Mark){ answer+=num/2; } else if(!Mark && num%2){ answer+=100-num/2-1; } else{ answer+=100-num/2; } } vector<int> New; if(n%100){ if(A.size()>=100){ for(int i=0;i<n%100;i++){ New.push_back(A[i]); New.push_back(n-n%100+i); } } else{ for(int i=0;i<n%100;i++){ New.push_back(B[i]); New.push_back(n-n%100+i); } Mark=1; } int num=use_machine(New); if(Mark && num%2){ answer++; answer+=num/2; } else if(Mark){ answer+=num/2; } else if(!Mark && num%2){ answer+=n%100-num/2-1; } else{ answer+=n%100-num/2; } } return answer; }
#Verdict Execution timeMemoryGrader output
Fetching results...