Submission #1318919

#TimeUsernameProblemLanguageResultExecution timeMemory
1318919wangzhiyi33Mouse (info1cup19_mouse)C++20
100 / 100
30 ms332 KiB
#include <bits/stdc++.h> #include "grader.h" int query(vector<int> v); int n; mt19937 rnd(23232); bool yey[300]; void solve(int N){ n=N; vector<int>perm; for(int q=1;q<=n;q++){ perm.push_back(q); } while(true){ shuffle(perm.begin(),perm.end(),rnd); if(query(perm)==0)break; } // cout<<"PERM"<<endl; // for(auto x : perm){ // cout<<x<<" "; // } // cout<<endl; int benar=0,prv=0; while(true){ vector<int>slh; for(int q=0;q<n;q++){ if(!yey[q]){ slh.push_back(q); } } if(slh.empty())break; vector<int>tmp; while(true){ tmp=perm; shuffle(slh.begin(),slh.end(),rnd); for(int q=1;q<slh.size();q+=2){ swap(tmp[slh[q-1]],tmp[slh[q]]); } int apa=query(tmp); if(apa==n)return; if(apa>prv)break; } // for(auto x : slh){ // cout<<x<<" "; // } // cout<<endl; int l=0,r=slh.size()/2; int brp=0; while(l<=r){ int mid=(l+r)/2; tmp=perm; for(int q=0;q<mid;q++){ swap(tmp[slh[2*q]],tmp[slh[2*q+1]]); } int apa=query(tmp); if(apa==n)return; if(apa>prv){ brp=mid; r=mid-1; } else{ l=mid+1; } } brp--; int a=slh[2*brp],b=slh[2*brp+1]; swap(perm[a],perm[b]); int tot=query(perm); if(tot==n)return; if(tot-prv==2){ yey[a]=yey[b]=true; benar=a; prv=tot; continue; } if(benar){ tmp=perm; swap(tmp[a],tmp[benar]); int apa=query(tmp); if(apa==n)return; if(apa==tot-1){ yey[b]=true; } else{ yey[a]=true; } prv=tot; } else{ int lain=1; while(lain==a || lain==b)lain++; tmp=perm; swap(tmp[lain],tmp[b]); int apa=query(tmp); if(apa==n)return; if(apa<tot){ yey[b]=true; benar=b; } else{ yey[a]=true; benar=a; } prv=tot; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...