Submission #885851

#TimeUsernameProblemLanguageResultExecution timeMemory
885851JakobZorzSorting (IOI15_sorting)C++17
74 / 100
1025 ms15956 KiB
#include"sorting.h" #include<iostream> #include<vector> using namespace std; int n; int*x,*y,*s; vector<pair<int,int>>construct(int m){ vector<pair<int,int>>ans(m); vector<int>perm(n),curr(n),inv_perm(n); for(int i=0;i<n;i++){ perm[i]=i; inv_perm[i]=i; curr[i]=s[i]; } for(int i=0;i<m;i++) swap(curr[x[i]],curr[y[i]]); for(int i=m-1;i>=0;i--){ swap(perm[x[i]],perm[y[i]]); swap(inv_perm[perm[x[i]]],inv_perm[perm[y[i]]]); } for(int i=0;i<m;i++){ swap(perm[x[i]],perm[y[i]]); swap(inv_perm[perm[x[i]]],inv_perm[perm[y[i]]]); for(int j=0;j<n;j++){ if(curr[j]!=j){ ans[i].first=inv_perm[j]; for(int k=0;k<n;k++){ if(curr[k]==j){ swap(curr[j],curr[k]); ans[i].second=inv_perm[k]; break; } } break; } } } for(int i=0;i<n;i++) if(curr[i]!=i) return {}; return ans; } int findSwapPairs(int N,int S[],int _,int X[],int Y[],int P[],int Q[]){ n=N; x=X; y=Y; s=S; bool already_done=true; for(int i=0;i<n;i++) if(s[i]!=i) already_done=false; if(already_done) return 0; int l=0,r=n; while(l<r-1){ int mid=(l+r)/2; if(construct(mid).empty()) l=mid; else r=mid; } int opt=r; vector<pair<int,int>>res=construct(opt); for(int i=0;i<opt;i++){ P[i]=res[i].first; Q[i]=res[i].second; } /*vector<int>test(n); for(int i=0;i<n;i++) test[i]=s[i]; for(int i=0;i<opt;i++){ swap(test[x[i]],test[y[i]]); swap(test[P[i]],test[Q[i]]); bool sorted=true; for(int j=0;j<n;j++) if(test[j]!=j) sorted=false; if(sorted) return i+1; } #ifdef JAKOB for(int i:test) cout<<i<<" "; cout<<"\n"; #endif*/ return opt; }

Compilation message (stderr)

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:52:37: warning: unused parameter '_' [-Wunused-parameter]
   52 | int findSwapPairs(int N,int S[],int _,int X[],int Y[],int P[],int Q[]){
      |                                 ~~~~^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...