#include <iostream> #include <vector> #include <algorithm> using namespace std; int n = 0, wczytana_liczba = 0, ile_mamy = 0; bool czy_wystarczy_jeden = true; vector<pair<int,int>> wyn_vect; vector<int> liczby; vector<int> liczby_posortowane; vector<int> stat; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; stat.assign(5000,-1); for (int i = 0; i < n; ++i) { cin >> wczytana_liczba; liczby.push_back(wczytana_liczba); liczby_posortowane.push_back(wczytana_liczba); stat[wczytana_liczba] = i; } sort(liczby_posortowane.begin(),liczby_posortowane.end()); for (int i = 0; i < n; ++i) { if (liczby[i] == liczby_posortowane[i]) ile_mamy++; } if (ile_mamy == n) { printf("0"); return 0; } for (int i = 0; i < n; ++i) { if (liczby[i] != liczby_posortowane[i]) { if (!(liczby_posortowane[i] == liczby[stat[liczby_posortowane[i]]] && liczby[i] == liczby_posortowane[stat[liczby_posortowane[i]]])) czy_wystarczy_jeden = false; liczby[i] = liczby_posortowane[i]; liczby[stat[liczby_posortowane[i]]] = liczby_posortowane[stat[liczby_posortowane[i]]]; //cout << "I: " << i << endl; wyn_vect.push_back({i+1,stat[liczby_posortowane[i]]+1}); } } if (czy_wystarczy_jeden == true) { printf("1 \n%d\n",2*wyn_vect.size()); for (int i = 0; i < wyn_vect.size(); ++i) printf("%d ",wyn_vect[i].first); for (int i = wyn_vect.size()-1; i >= 0; --i) printf("%d ",wyn_vect[i].second); return 0; } printf("2 \n"); printf("%d \n",n); for (int i = 0; i < n; ++i) printf("%d ",i+1); printf("\n%d \n",n); for (int i = 0; i < n; ++i) printf("%d ",i+1); return 0; }
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int n = 0, wczytana_liczba = 0, ile_mamy = 0; bool czy_wystarczy_jeden = true; vector<pair<int,int>> wyn_vect; vector<int> liczby; vector<int> liczby_posortowane; vector<int> stat; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; stat.assign(5000,-1); for (int i = 0; i < n; ++i) { cin >> wczytana_liczba; liczby.push_back(wczytana_liczba); liczby_posortowane.push_back(wczytana_liczba); stat[wczytana_liczba] = i; } sort(liczby_posortowane.begin(),liczby_posortowane.end()); for (int i = 0; i < n; ++i) { if (liczby[i] == liczby_posortowane[i]) ile_mamy++; } if (ile_mamy == n) { printf("0"); return 0; } for (int i = 0; i < n; ++i) { if (liczby[i] != liczby_posortowane[i]) { if (!(liczby_posortowane[i] == liczby[stat[liczby_posortowane[i]]] && liczby[i] == liczby_posortowane[stat[liczby_posortowane[i]]])) czy_wystarczy_jeden = false; liczby[i] = liczby_posortowane[i]; liczby[stat[liczby_posortowane[i]]] = liczby_posortowane[stat[liczby_posortowane[i]]]; //cout << "I: " << i << endl; wyn_vect.push_back({i+1,stat[liczby_posortowane[i]]+1}); } } if (czy_wystarczy_jeden == true) { printf("1 \n%d\n",2*wyn_vect.size()); for (int i = 0; i < wyn_vect.size(); ++i) printf("%d ",wyn_vect[i].first); for (int i = wyn_vect.size()-1; i >= 0; --i) printf("%d ",wyn_vect[i].second); return 0; } printf("2 \n"); printf("%d \n",n); for (int i = 0; i < n; ++i) printf("%d ",i+1); printf("\n%d \n",n); for (int i = 0; i < n; ++i) printf("%d ",i+1); return 0; } |