Submission #899877

#TimeUsernameProblemLanguageResultExecution timeMemory
899877abcvuitunggioCounting Mushrooms (IOI20_mushrooms)C++17
98.26 / 100
6 ms984 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; const int k=75; vector <int> a[2]; int t,res; 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[0].push_back(0); for (int i=1;i<=2;i++){ int x=use_machine({0,i}); a[x].push_back(i); } int ch=0; if (a[0].size()<a[1].size()){ swap(a[0],a[1]); ch=1; } int x=use_machine({3,a[0][0],4,a[0][1]}); a[x&1].push_back(3); a[(x>>1)&1].push_back(4); if (a[0].size()<a[1].size()){ swap(a[0],a[1]); ch^=1; } for (int i=5;max(a[0].size(),a[1].size())<k;){ int x=use_machine({i,a[0][0],i+1,a[0][1],i+2,a[0][2]}); a[x&1].push_back(i); x/=2; if (x%2==0){ a[x/2].push_back(i+1); a[x/2].push_back(i+2); i+=3; continue; } if (a[1].size()<2){ x=use_machine({a[0][0],i+1}); a[x].push_back(i+1); a[x^1].push_back(i+2); i+=3; continue; } x=use_machine({i+4,a[0][0],i+3,a[0][1],i+2,a[0][2],a[1][0],i+1,a[1][1]})-1; a[x&1].push_back(i+4); x/=2; a[x&1].push_back(i+3); x/=2; a[x].push_back(i+2); a[x^1].push_back(i+1); i+=5; } t=(a[0].size()<k)^ch; if (a[0].size()<k) swap(a[0],a[1]); res=a[1].size(); for (int i=a[0].size()+a[1].size();i<n;){ vector <int> ve; for (int j=i;j<min(i+(int)a[0].size(),n);j++){ ve.push_back(j); ve.push_back(a[0][j-i]); } int x=use_machine(ve); res+=(x+1)/2; a[x&1].push_back(i); if (a[0].size()<a[1].size()){ res=min(i+(int)a[0].size(),n)-res; swap(a[0],a[1]); t^=1; } i=ve[ve.size()-2]+1; } return (t?res:n-res); }
#Verdict Execution timeMemoryGrader output
Fetching results...