Submission #354171

#TimeUsernameProblemLanguageResultExecution timeMemory
354171juggernautCounting Mushrooms (IOI20_mushrooms)C++14
25 / 100
111 ms784 KiB
#include"mushrooms.h" #ifndef EVAL #include"stub.cpp" #endif #include<bits/stdc++.h> using namespace std; int count_mushrooms(int n){ vector<int>a,b; a.push_back(0); int id=1; while(/*max(a.size(),b.size())<120&&*/id<n){ if(a.size()>=3&&b.size()>=2&&id+4<n){ int ans1=use_machine({a[0],id,a[1],id+1,a[2],id+2}); if(ans1&1)b.push_back(id+2); else a.push_back(id+2); ans1>>=1; if(ans1==0){ a.push_back(id); a.push_back(id+1); id+=3; }else if(ans1==2){ b.push_back(id); b.push_back(id+1); id+=3; }else{ int ans2=use_machine({b[0],id,b[1],a[0],id+1,a[1],id+3,a[2],id+4})-1; if(ans2&1)b.push_back(id+4); else a.push_back(id+4); ans2>>=1; if(ans2&1)b.push_back(id+3); else a.push_back(id+3); ans2>>=1; if(ans2&1){ b.push_back(id); a.push_back(id+1); }else{ a.push_back(id); b.push_back(id+1); } id+=5; } }else if(b.size()>=3&&a.size()>=2&&id+4<n){ int ans1=use_machine({b[0],id,b[1],id+1,b[2],id+2}); if(ans1&1)a.push_back(id+2); else b.push_back(id+2); ans1>>=1; if(ans1==0){ b.push_back(id); b.push_back(id+1); id+=3; }else if(ans1==2){ a.push_back(id); a.push_back(id+1); id+=3; }else{ int ans2=use_machine({a[0],id,a[1],b[0],id+1,b[1],id+3,b[2],id+4})-1; if(ans2&1)a.push_back(id+4); else b.push_back(id+4); ans2>>=1; if(ans2&1)a.push_back(id+3); else b.push_back(id+3); ans2>>=1; if(ans2&1){ b.push_back(id); a.push_back(id+1); }else{ a.push_back(id); b.push_back(id+1); } id+=5; } }else if(a.size()>=2&&id+1<n){ int ans=use_machine({a[0],id,a[1],id+1}); if(ans&1)b.push_back(id+1); else a.push_back(id+1); ans>>=1; if(ans&1)b.push_back(id); else a.push_back(id); id+=2; }else if(b.size()>=2&&id+1<n){ int ans=use_machine({b[0],id,b[1],id+1}); if(ans&1)a.push_back(id+1); else b.push_back(id+1); ans>>=1; if(ans&1)a.push_back(id); else b.push_back(id); id+=2; }else{ if(use_machine({0,id}))b.push_back(id); else a.push_back(id); id++; } } int res=(int)a.size(); // while(id<n){ // int j; // if(a.size()>b.size()){ // vector<int>v; // for(j=0;j<a.size()&&id+j<n;j++){ // v.push_back(a[j]); // v.push_back(id+j); // } // id+=j; // j=use_machine(v); // if(j&1)b.push_back(v.back()); // else a.push_back(v.back()); // j++; // j>>=1; // res+=(((int(v.size()))>>1))-j; // }else{ // vector<int>v; // for(j=0;j<b.size()&&id+j<n;j++){ // v.push_back(b[j]); // v.push_back(id+j); // } // id+=j; // j=use_machine(v); // if(j&1)a.push_back(v.back()); // else b.push_back(v.back()); // j++; // j>>=1; // res+=j; // } // } return res; } /* 10 0 1 1 0 1 1 1 0 0 1 */
#Verdict Execution timeMemoryGrader output
Fetching results...