Submission #604635

#TimeUsernameProblemLanguageResultExecution timeMemory
604635rrrr10000Counting Mushrooms (IOI20_mushrooms)C++14
92.62 / 100
16 ms720 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); vi ord(n); rep(i,n)ord[i]=i; random_shuffle(ord.begin()+1,ord.end()); { REP(I,1,3){ ll i=ord[I]; vector<int> ask(2,ord[0]); 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){ ll i=ord[I],j=ord[I+1]; vector<int> ask(4); ask[1]=va[0];ask[3]=va[1]; ask[0]=i;ask[2]=j; int res=use_machine(ask); if(res%2==0)va.pb(i); else vb.pb(i); if(res/2==0)va.pb(j); else vb.pb(j); } 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(ord[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...