Submission #1047061

#TimeUsernameProblemLanguageResultExecution timeMemory
1047061MarwenElarbiCounting Mushrooms (IOI20_mushrooms)C++17
80.14 / 100
5 ms600 KiB
#include <bits/stdc++.h> using namespace std; #include "mushrooms.h" #define pb push_back int count_mushrooms(int n) { if(n==2) return 1+(1-use_machine({1,0})); vector<int> aa; aa.pb(0); vector<int> bb; int lst=3; ( use_machine({0,1}) ? bb.pb(1) : aa.pb(1)); ( use_machine({0,2}) ? bb.pb(2) : aa.pb(2)); for (int i = 3; i+1 < min(n,284); i+=2) { if(aa.size()>=141||bb.size()>=141) break; lst=i+2; int cur; if(aa.size()>=2){ cur=use_machine({i,aa[0],i+1,aa[1]}); if(cur==0){ aa.pb(i); aa.pb(i+1); }else if(cur==1){ bb.pb(i); aa.pb(i+1); }else if(cur==2){ aa.pb(i); bb.pb(i+1); }else if(cur==3){ bb.pb(i); bb.pb(i+1); } } else{ cur=use_machine({i,bb[0],i+1,bb[1]}); if(cur==0){ bb.pb(i); bb.pb(i+1); }else if(cur==1){ aa.pb(i); bb.pb(i+1); }else if(cur==2){ bb.pb(i); aa.pb(i+1); }else if(cur==3){ aa.pb(i); aa.pb(i+1); } } } int ans=aa.size(); for (int i = lst; i < n; i+=140) { vector<int> cur; int k=0; for (int j = 0; j < min(n-i,140); ++j) { cur.pb(j+i); cur.pb((aa.size()>bb.size() ? aa[k++] : bb[k++])); } int cnt=use_machine(cur); cnt++; ans+=(aa.size()<=bb.size() ? cnt/2 : cur.size()-k-cnt/2); if((cnt-1)%2) ((aa.size()>bb.size() ? bb.pb(i) : aa.pb(i))); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...