Submission #365613

#TimeUsernameProblemLanguageResultExecution timeMemory
365613qwerasdfzxclCounting Mushrooms (IOI20_mushrooms)C++14
91.87 / 100
10 ms512 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; vector<int> m; vector<int> a, b, val; /* int use_machine(vector<int> &v){ int ret; for (int x:v) printf("%d ", x); printf("\n"); scanf("%d", &ret); return ret; }*/ int count_mushrooms(int n){ if (n<=226){ m.push_back(0); int ret=1; for (int i=1;i<n;i++){ m.push_back(i); if (use_machine(m)==0) ret++; m.pop_back(); } //printf("%d\n", ret); return ret; } m.push_back(0); a.push_back(0); int chk=1; for (int i=1;i<=4;i++){ chk++; m.push_back(i); val.push_back(use_machine(m)); if (val.back()) b.push_back(i); else{ a.push_back(i); } m.pop_back(); } m.clear(); m.resize(6, 0); int cur_state; if (a.size()>b.size()){ cur_state=1; m[1]=0; m[3]=a[1]; m[5]=a[2]; } else{ cur_state=2; m[1]=b[0]; m[3]=b[1]; m[5]=b[2]; } int vall=180; bool test=0; int idx1, idx2; for (;(int)a.size()+(int)b.size()<vall;chk += 3){ if (test) chk--; m[0]=chk; m[2]=chk+1; m[4]=chk+2; val.push_back(use_machine(m)); if (test){ if (val.back()&1 && cur_state==2) swap(a[idx1], b[idx2]); else if (val.back()%2==0 && cur_state==1) swap(a[idx1], b[idx2]); } else{ if (val.back()&1){ if (cur_state==1) b.push_back(chk); else a.push_back(chk); } else{ if (cur_state==2) b.push_back(chk); else a.push_back(chk); } } if (val.back()/2==2){ test=0; if (cur_state==1){ b.push_back(chk+1); b.push_back(chk+2); } else{ a.push_back(chk+1); a.push_back(chk+2); } } else if (val.back()/2==1){ test=1; a.push_back(chk+1); b.push_back(chk+2); idx1=(int)a.size()-1; idx2=(int)b.size()-1; } else{ test=0; if (cur_state==2){ b.push_back(chk+1); b.push_back(chk+2); } else{ a.push_back(chk+1); a.push_back(chk+2); } } } if (test){ m.clear(); m.push_back(chk-1); m.push_back(0); int tmp=use_machine(m); if (tmp==0) swap(a[idx1], b[idx2]); } m.clear(); m.resize(2*vall, 0); if (a.size()>b.size()){ cur_state=1; for (int i=0;i<vall;i++) m[i*2+1]=a[i]; } else{ cur_state=2; for (int i=0;i<vall;i++) m[i*2+1]=b[i]; } int ans=0, ans2=(int)a.size(); int sz=max((int)a.size(), (int)b.size()); while(true){ if (n-chk<=sz){ m.clear(); for (int i=0;i<sz;i++){ if (chk+i>=n){ break; } m.push_back(chk+i); if (cur_state==1)m.push_back(a[i]); else m.push_back(b[i]); } int tmp=use_machine(m); tmp++; if (cur_state==1) ans += ((int)m.size()/2-tmp/2); else ans += tmp/2; break; } m.clear(); m.resize(2*sz, 0); for (int i=0;i<sz;i++){ if (cur_state==1) m[i*2+1]=a[i]; else m[i*2+1]=b[i]; } for (int i=0;i<sz;i++){ m[i*2]=chk+i; } int tmp=use_machine(m); tmp++; if (cur_state==1) ans += (sz-tmp/2); else ans += tmp/2; tmp--; if (tmp&1){ if (cur_state==1) b.push_back(m[0]); else a.push_back(m[0]); } else{ if (cur_state==2) b.push_back(m[0]); else a.push_back(m[0]); } chk += sz; sz=max((int)a.size(), (int)b.size()); if (a.size()>b.size()) cur_state=1; else cur_state=2; } //printf("%d\n", ans+(int)a.size()); return ans+ans2; } /* int main(){ int n; scanf("%d", &n); printf("%d", count_mushrooms(n)); return 0; }*/

Compilation message (stderr)

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:62:66: warning: 'idx1' may be used uninitialized in this function [-Wmaybe-uninitialized]
   62 |             else if (val.back()%2==0 && cur_state==1) swap(a[idx1], b[idx2]);
      |                                                                  ^
mushrooms.cpp:62:75: warning: 'idx2' may be used uninitialized in this function [-Wmaybe-uninitialized]
   62 |             else if (val.back()%2==0 && cur_state==1) swap(a[idx1], b[idx2]);
      |                                                                           ^
#Verdict Execution timeMemoryGrader output
Fetching results...