#include<bits/stdc++.h> using namespace std; const int MAXN=3e3+9; pair<int,int>sor[MAXN]; int t[MAXN]; int por[MAXN]; int ktor[MAXN]; vector<int>kon,poc; void sorr(int x){ int kt=ktor[x]; int pr=por[x]; int prkt=por[kt]; int prpr=por[pr]; swap(ktor[prkt],ktor[prpr]); swap(por[pr],por[kt]); poc.push_back(pr); kon.push_back(kt); if(!(por[por[kt]]==kt))sorr(kt); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=0;i<n;i++){ cin>>t[i]; sor[i].first=t[i]; sor[i].second=i; } sort(sor,sor+n); for(int i=0;i<n;i++){ por[sor[i].second]=i; ktor[i]=sor[i].second; } bool f0=1; for(int i=0;i<n;i++){ if(por[i]!=i) f0=0; } if(f0){ cout<<0; return 0; } bool fl=1; for(int i=0;i<n;i++){ if(!(por[por[i]]==i)){ fl=0; break; } } if(fl==0){ cout<<2<<"\n"; for(int i=0;i<n;i++){ if(!(por[por[i]]==i)){ sorr(i); } } cout<<(poc.size()+kon.size())<<"\n"; for(auto a:poc){ cout<<(a+1)<<" "; } for(int i=kon.size()-1;i>=0;i--){ cout<<(kon[i]+1)<<" "; } cout<<"\n"; } if(fl) cout<<1<<"\n"; kon.clear(); poc.clear(); for(int i=0;i<n;i++){ if(por[i]!=i){ poc.push_back(i); kon.push_back(por[i]); swap(por[i],por[por[i]]); } } cout<<(poc.size()+kon.size())<<"\n"; for(auto a:poc){ cout<<(a+1)<<" "; } for(int i=kon.size()-1;i>=0;i--){ cout<<(kon[i]+1)<<" "; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include<bits/stdc++.h> using namespace std; const int MAXN=3e3+9; pair<int,int>sor[MAXN]; int t[MAXN]; int por[MAXN]; int ktor[MAXN]; vector<int>kon,poc; void sorr(int x){ int kt=ktor[x]; int pr=por[x]; int prkt=por[kt]; int prpr=por[pr]; swap(ktor[prkt],ktor[prpr]); swap(por[pr],por[kt]); poc.push_back(pr); kon.push_back(kt); if(!(por[por[kt]]==kt))sorr(kt); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=0;i<n;i++){ cin>>t[i]; sor[i].first=t[i]; sor[i].second=i; } sort(sor,sor+n); for(int i=0;i<n;i++){ por[sor[i].second]=i; ktor[i]=sor[i].second; } bool f0=1; for(int i=0;i<n;i++){ if(por[i]!=i) f0=0; } if(f0){ cout<<0; return 0; } bool fl=1; for(int i=0;i<n;i++){ if(!(por[por[i]]==i)){ fl=0; break; } } if(fl==0){ cout<<2<<"\n"; for(int i=0;i<n;i++){ if(!(por[por[i]]==i)){ sorr(i); } } cout<<(poc.size()+kon.size())<<"\n"; for(auto a:poc){ cout<<(a+1)<<" "; } for(int i=kon.size()-1;i>=0;i--){ cout<<(kon[i]+1)<<" "; } cout<<"\n"; } if(fl) cout<<1<<"\n"; kon.clear(); poc.clear(); for(int i=0;i<n;i++){ if(por[i]!=i){ poc.push_back(i); kon.push_back(por[i]); swap(por[i],por[por[i]]); } } cout<<(poc.size()+kon.size())<<"\n"; for(auto a:poc){ cout<<(a+1)<<" "; } for(int i=kon.size()-1;i>=0;i--){ cout<<(kon[i]+1)<<" "; } } |