Submission #898999

#TimeUsernameProblemLanguageResultExecution timeMemory
898999abcvuitunggioCounting Mushrooms (IOI20_mushrooms)C++17
92.62 / 100
5 ms720 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; const int k=90; vector <int> a,b; int t,res,sz; int count_mushrooms(int n){ if (n<=227){ for (int i=1;i<n;i++) res+=1-use_machine({0,i}); return res+1; } a.push_back(0); for (int i=1;i<=2;i++){ int x=use_machine({0,i}); if (x) b.push_back(i); else a.push_back(i); } for (int i=3;;i+=2){ if (max(a.size(),b.size())>=k) break; if (a.size()>1){ int x=use_machine({i,a[0],i+1,a[1]}); if (x&1) b.push_back(i); else a.push_back(i); if ((x>>1)&1) b.push_back(i+1); else a.push_back(i+1); continue; } int x=use_machine({i,b[0],i+1,b[1]}); if (x&1) a.push_back(i); else b.push_back(i); if ((x>>1)&1) a.push_back(i+1); else b.push_back(i+1); } t=(a.size()<k); if (a.size()<k) swap(a,b); res=b.size(); for (int i=a.size()+b.size();i<n;){ if (i==n-1){ res+=abs(t-use_machine({0,i})); break; } vector <int> ve; for (int j=i;j<min(i+(int)a.size(),n);j++){ ve.push_back(j); ve.push_back(a[j-i]); } int x=use_machine(ve); res+=(x+1)/2; if (x&1) b.push_back(i); else a.push_back(i); if (a.size()<b.size()){ res=min(i+(int)a.size(),n)-res; swap(a,b); t^=1; } i=ve[ve.size()-2]+1; } return (t?res:n-res); }
#Verdict Execution timeMemoryGrader output
Fetching results...