#include <bits/stdc++.h> using namespace std; int kolejne[3008], w, n, x, wynik; bool visited[3008]; vector<pair<int, int> > indeksy; deque<int> nr_ruchu[3008]; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> x; indeksy.push_back({x, i}); } sort(indeksy.begin(), indeksy.end()); for (int i = 0; i < indeksy.size(); i++) { kolejne[indeksy[i].second] = i+1; } for (int i = 1; i <= n; i++) { if(visited[i]) continue; if(i == kolejne[i]) { w++; } else if(i == kolejne[kolejne[i]]) { w += 2; nr_ruchu[1].push_front(i); nr_ruchu[1].push_back(kolejne[i]); visited[i] = true; visited[kolejne[i]] = true; } else { nr_ruchu[2].push_front(kolejne[i]); nr_ruchu[2].push_back(kolejne[kolejne[i]]); nr_ruchu[1].push_front(i); nr_ruchu[1].push_back(kolejne[i]); visited[i] = true; visited[kolejne[i]] = true; visited[kolejne[kolejne[i]]] = true; } } if (w == n || nr_ruchu[2].size() == 0) wynik = 1; else wynik = 2; cout << wynik << "\n"; for (int i = wynik; i >= 1; i--) { cout << nr_ruchu[i].size() << "\n"; for (int j = 0; j < nr_ruchu[i].size(); j++) { cout << nr_ruchu[i][j] << " "; } cout << "\n"; } }
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 | #include <bits/stdc++.h> using namespace std; int kolejne[3008], w, n, x, wynik; bool visited[3008]; vector<pair<int, int> > indeksy; deque<int> nr_ruchu[3008]; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> x; indeksy.push_back({x, i}); } sort(indeksy.begin(), indeksy.end()); for (int i = 0; i < indeksy.size(); i++) { kolejne[indeksy[i].second] = i+1; } for (int i = 1; i <= n; i++) { if(visited[i]) continue; if(i == kolejne[i]) { w++; } else if(i == kolejne[kolejne[i]]) { w += 2; nr_ruchu[1].push_front(i); nr_ruchu[1].push_back(kolejne[i]); visited[i] = true; visited[kolejne[i]] = true; } else { nr_ruchu[2].push_front(kolejne[i]); nr_ruchu[2].push_back(kolejne[kolejne[i]]); nr_ruchu[1].push_front(i); nr_ruchu[1].push_back(kolejne[i]); visited[i] = true; visited[kolejne[i]] = true; visited[kolejne[kolejne[i]]] = true; } } if (w == n || nr_ruchu[2].size() == 0) wynik = 1; else wynik = 2; cout << wynik << "\n"; for (int i = wynik; i >= 1; i--) { cout << nr_ruchu[i].size() << "\n"; for (int j = 0; j < nr_ruchu[i].size(); j++) { cout << nr_ruchu[i][j] << " "; } cout << "\n"; } } |