#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; } |
English