// per.cpp // version 1 // // Autor: Jakub Chmist // Utworzony 20.11.2017. #include <iostream> #include <vector> #include <algorithm> #include <iterator> //#include <array> //#include <cmath> //#include <iomanip> using namespace std; vector<int> liczby; //sprawdzanie ilosci inwersji wprzod i wstecz bool permutacja_stabilna() { vector<int>::iterator it1, it2; vector<int>::reverse_iterator rit1, rit2; long long inwersje_wprzod=0; long long inwersje_wstecz=0; for (it1=liczby.begin()+1; it1!=liczby.end(); ++it1) { for (it2=liczby.begin(); it2<it1; ++it2) { if(*it1<*it2) inwersje_wprzod++; } } for (rit1=liczby.rbegin()+1; rit1!=liczby.rend(); ++rit1) { for (rit2=liczby.rbegin(); rit2<rit1; ++rit2) { if(*rit1<*rit2) inwersje_wstecz++; } } return inwersje_wprzod == inwersje_wstecz; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; long long k; long long liczba_stabilnych = 0; vector<int> k_permutacja_stabilna; vector<int>::iterator liczby_it; cin >> n >> k; for (int i = 0; i < n; i++){ liczby.push_back(i+1); } do { if (permutacja_stabilna()){ liczba_stabilnych++; if (liczba_stabilnych == k){ k_permutacja_stabilna = liczby; break; } } } while(next_permutation(liczby.begin(), liczby.end())); if (k_permutacja_stabilna.empty()) { cout << "NIE" << "\n"; } else { cout << "TAK" << "\n"; for (liczby_it=k_permutacja_stabilna.begin(); liczby_it!=k_permutacja_stabilna.end(); ++liczby_it) { cout << *liczby_it << " "; } cout << "\n"; } 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 76 77 78 79 80 81 82 83 84 | // per.cpp // version 1 // // Autor: Jakub Chmist // Utworzony 20.11.2017. #include <iostream> #include <vector> #include <algorithm> #include <iterator> //#include <array> //#include <cmath> //#include <iomanip> using namespace std; vector<int> liczby; //sprawdzanie ilosci inwersji wprzod i wstecz bool permutacja_stabilna() { vector<int>::iterator it1, it2; vector<int>::reverse_iterator rit1, rit2; long long inwersje_wprzod=0; long long inwersje_wstecz=0; for (it1=liczby.begin()+1; it1!=liczby.end(); ++it1) { for (it2=liczby.begin(); it2<it1; ++it2) { if(*it1<*it2) inwersje_wprzod++; } } for (rit1=liczby.rbegin()+1; rit1!=liczby.rend(); ++rit1) { for (rit2=liczby.rbegin(); rit2<rit1; ++rit2) { if(*rit1<*rit2) inwersje_wstecz++; } } return inwersje_wprzod == inwersje_wstecz; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; long long k; long long liczba_stabilnych = 0; vector<int> k_permutacja_stabilna; vector<int>::iterator liczby_it; cin >> n >> k; for (int i = 0; i < n; i++){ liczby.push_back(i+1); } do { if (permutacja_stabilna()){ liczba_stabilnych++; if (liczba_stabilnych == k){ k_permutacja_stabilna = liczby; break; } } } while(next_permutation(liczby.begin(), liczby.end())); if (k_permutacja_stabilna.empty()) { cout << "NIE" << "\n"; } else { cout << "TAK" << "\n"; for (liczby_it=k_permutacja_stabilna.begin(); liczby_it!=k_permutacja_stabilna.end(); ++liczby_it) { cout << *liczby_it << " "; } cout << "\n"; } return 0; } |