#include <bits/stdc++.h> using namespace std; vector<int>v; map<int,int>m; //pozycja w v dla danego elementu vector<deque<int>>wyniki; void solve(int i){ deque<int>s; vector<int>d=v; sort(d.begin(),d.begin()+i); bool e=true; i=i-1; vector<bool>ruszone(i,false); while(e==true&&i>=0){ if(v[i]==d[i]){ i--; } else if(ruszone[i]==false){ s.push_front(i+1); s.push_back(m[d[i]]+1); swap(v[m[d[i]]],v[i]); int xd=m[i]; m[i]=m[m[d[i]]]; m[m[d[i]]]=xd; ruszone[i]=true; ruszone[m[d[i]]]=true; i--; } else{ e=false; } } if(s.empty()==false){ wyniki.push_back(s); } if(i<=0){ return; } else{ i++; solve(i); return; } } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ int a; cin>>a; v.push_back(a); m[a]=i; } solve(n); cout<<wyniki.size()<<'\n'; for(int i=0;i<wyniki.size();i++){ cout<<wyniki[i].size()<<'\n'; for(int j=0;j<wyniki[i].size();j++){ cout<<wyniki[i][j]<<" "; } cout<<'\n'; } v.clear(); m.clear(); wyniki.clear(); }
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 | #include <bits/stdc++.h> using namespace std; vector<int>v; map<int,int>m; //pozycja w v dla danego elementu vector<deque<int>>wyniki; void solve(int i){ deque<int>s; vector<int>d=v; sort(d.begin(),d.begin()+i); bool e=true; i=i-1; vector<bool>ruszone(i,false); while(e==true&&i>=0){ if(v[i]==d[i]){ i--; } else if(ruszone[i]==false){ s.push_front(i+1); s.push_back(m[d[i]]+1); swap(v[m[d[i]]],v[i]); int xd=m[i]; m[i]=m[m[d[i]]]; m[m[d[i]]]=xd; ruszone[i]=true; ruszone[m[d[i]]]=true; i--; } else{ e=false; } } if(s.empty()==false){ wyniki.push_back(s); } if(i<=0){ return; } else{ i++; solve(i); return; } } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ int a; cin>>a; v.push_back(a); m[a]=i; } solve(n); cout<<wyniki.size()<<'\n'; for(int i=0;i<wyniki.size();i++){ cout<<wyniki[i].size()<<'\n'; for(int j=0;j<wyniki[i].size();j++){ cout<<wyniki[i][j]<<" "; } cout<<'\n'; } v.clear(); m.clear(); wyniki.clear(); } |