#include <iostream> #include<vector> #include<algorithm> using namespace std; int main() { ios_base::sync_with_stdio; cin.tie(0); int n; cin >> n; vector<pair<int,int>> tab(n); for (int i = 0; i < n; i++) { cin >> tab[i].first; tab[i].second = i; } sort(tab.begin(),tab.end()); /*for (int i = 0; i < n; i++) { cout << tab[i].first<<" "; cout << tab[i].second<<" "; }*/ vector<bool> byl(n, 0); int odp = 0; int licz = 0; int pom = 0; int aaah = 0; int dl = 0; int amortyzacja = 0; vector<vector<int>>zamiany; while (licz == 0) { for (int i = amortyzacja; i < n; i++) { if (byl[i] == 0 && i !=tab[i].second) { pom = tab[i].second; amortyzacja = i; break; } licz = 1; } zamiany.push_back({0}); // cout << " "; while (byl[pom]== 0) { byl[pom] = 1; zamiany[aaah].push_back(pom); pom = tab[pom].second; dl++; if (dl > odp) odp = dl; } dl = 0; aaah++; } odp--; cout << odp<< '\n'; /*for (int i = 0; i < zamiany.size(); i++) { for (int j = 1; j < zamiany[i].size(); j++) { cout << zamiany[i][j]; } cout << endl; }*/ int ind = 1; int rozmiar = 2*(zamiany.size() - 1); for (int k = 0; k < odp; k++) { for (int i = 0; i < zamiany.size(); i++) { if (ind+1 < zamiany[i].size()) { cout << zamiany[i][ind] + 1; } } for (int i = zamiany.size()-1; i >-1 ; i--) { // cout << i << ind + 1; if (ind + 1 < zamiany[i].size()) { cout << zamiany[i][ind + 1] + 1; if (ind + 1 == zamiany[i].size() - 1) rozmiar--; } } ind++; cout << endl; } }
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 | #include <iostream> #include<vector> #include<algorithm> using namespace std; int main() { ios_base::sync_with_stdio; cin.tie(0); int n; cin >> n; vector<pair<int,int>> tab(n); for (int i = 0; i < n; i++) { cin >> tab[i].first; tab[i].second = i; } sort(tab.begin(),tab.end()); /*for (int i = 0; i < n; i++) { cout << tab[i].first<<" "; cout << tab[i].second<<" "; }*/ vector<bool> byl(n, 0); int odp = 0; int licz = 0; int pom = 0; int aaah = 0; int dl = 0; int amortyzacja = 0; vector<vector<int>>zamiany; while (licz == 0) { for (int i = amortyzacja; i < n; i++) { if (byl[i] == 0 && i !=tab[i].second) { pom = tab[i].second; amortyzacja = i; break; } licz = 1; } zamiany.push_back({0}); // cout << " "; while (byl[pom]== 0) { byl[pom] = 1; zamiany[aaah].push_back(pom); pom = tab[pom].second; dl++; if (dl > odp) odp = dl; } dl = 0; aaah++; } odp--; cout << odp<< '\n'; /*for (int i = 0; i < zamiany.size(); i++) { for (int j = 1; j < zamiany[i].size(); j++) { cout << zamiany[i][j]; } cout << endl; }*/ int ind = 1; int rozmiar = 2*(zamiany.size() - 1); for (int k = 0; k < odp; k++) { for (int i = 0; i < zamiany.size(); i++) { if (ind+1 < zamiany[i].size()) { cout << zamiany[i][ind] + 1; } } for (int i = zamiany.size()-1; i >-1 ; i--) { // cout << i << ind + 1; if (ind + 1 < zamiany[i].size()) { cout << zamiany[i][ind + 1] + 1; if (ind + 1 == zamiany[i].size() - 1) rozmiar--; } } ind++; cout << endl; } } |