Submission #604621

#TimeUsernameProblemLanguageResultExecution timeMemory
604621rrrr10000Counting Mushrooms (IOI20_mushrooms)C++14
92.62 / 100
9 ms360 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> vi; typedef vector<vi> vvi; typedef pair<ll,ll> P; typedef vector<P> vp; typedef vector<vp> vvp; typedef vector<bool> vb; #define rep(i,n) for(ll i=0;i<(ll)(n);i++) #define REP(i,k,n) for(ll i=(ll)(k);i<(ll)(n);i++) #define all(a) a.begin(),a.end() #define fi first #define se second #define pb emplace_back template<class T> void out(T a){cout<<a<<endl;} #include "mushrooms.h" int count_mushrooms(int n){ if(n<=226){ int ans=1; vector<int> ask(2); REP(i,1,n){ ask[1]=i; int res=use_machine(ask); if(res==0)ans++; } return ans; } int B=167,f=0; if(B%2==0)B++; vi va,vb;va.pb(0); { REP(i,1,3){ vector<int> ask(2); ask[1]=i; int res=use_machine(ask); if(res==0)va.pb(i); else vb.pb(i); } if(va.size()<vb.size()){ swap(va,vb);f^=1; } } { for(ll i=3;i<B;i+=2){ vector<int> ask(4); ask[1]=va[0];ask[3]=va[1]; ask[0]=i;ask[2]=i+1; int res=use_machine(ask); if(res%2==0)va.pb(i); else vb.pb(i); if(res/2==0)va.pb(i+1); else vb.pb(i+1); } if(va.size()<vb.size()){ swap(va,vb);f^=1; } } int ans=0; for(ll i=B;i<n;){ vi al; REP(j,i,i+va.size())if(j<n)al.pb(j); i+=va.size(); vector<int> ask(al.size()*2); rep(j,al.size())ask[j*2]=al[j]; rep(j,al.size())ask[j*2+1]=va[j]; int res=use_machine(ask); if(f==1)ans+=res/2; else ans+=al.size()-1-res/2; if(res%2==0)va.pb(al[0]); else vb.pb(al[0]); if(va.size()<vb.size()){ swap(va,vb);f^=1; } } if(f)ans+=vb.size(); else ans+=va.size(); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...