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