Submission #899019

#TimeUsernameProblemLanguageResultExecution timeMemory
899019abcvuitunggioCounting Mushrooms (IOI20_mushrooms)C++17
92.62 / 100
6 ms876 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; const int k=75; vector <int> a[2]; 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[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; } for (int i=3;max(a[0].size(),a[1].size())<k;i+=2){ int x=use_machine({i,a[0][0],i+1,a[0][1]}); a[x&1].push_back(i); a[(x>>1)&1].push_back(i+1); } 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;){ if (i==n-1){ res+=abs(t-use_machine({0,i})); break; } 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...