#include <algorithm> #include <iostream> #include <numeric> #include <vector> using namespace std; int suma_1_n( int n ) { return (n * (n + 1)) / 2; } bool mozliwy( int n ) { return (suma_1_n(n - 1) % 2 == 0)? true : false; } bool czy_stabilna(vector< int > const& v) { int rozm = v.size(); if(! mozliwy(rozm)) { return false; }; int WWmm = 0; int mmWW = 0; for( int i = 0; i < rozm - 1; ++i) { for ( int j = i + 1 ; j < rozm; ++j ) { if( v[i] < v[j] ) { mmWW += 1; } else { WWmm += 1; } } } return mmWW == WWmm; } int main() { int ile_liczb; cin >> ile_liczb; long long ile_wymaganych; cin >> ile_wymaganych; vector< int > liczby(ile_liczb); iota(liczby.begin(), liczby.end(), 1); int nr_iteracji = 0; int ile_stabilnych = 0; bool odp = false; do { bool stabilna = czy_stabilna(liczby); if( stabilna ) { ile_stabilnych += 1; } if( ile_stabilnych == ile_wymaganych ) { odp = true; } } while( (!odp) && next_permutation( liczby.begin(), liczby.end() ) ); if( odp ) { cout << "TAK" << endl; for( auto l : liczby ) { cout << l << " "; } cout << endl; } else { cout << "NIE" << endl; } }
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 <algorithm> #include <iostream> #include <numeric> #include <vector> using namespace std; int suma_1_n( int n ) { return (n * (n + 1)) / 2; } bool mozliwy( int n ) { return (suma_1_n(n - 1) % 2 == 0)? true : false; } bool czy_stabilna(vector< int > const& v) { int rozm = v.size(); if(! mozliwy(rozm)) { return false; }; int WWmm = 0; int mmWW = 0; for( int i = 0; i < rozm - 1; ++i) { for ( int j = i + 1 ; j < rozm; ++j ) { if( v[i] < v[j] ) { mmWW += 1; } else { WWmm += 1; } } } return mmWW == WWmm; } int main() { int ile_liczb; cin >> ile_liczb; long long ile_wymaganych; cin >> ile_wymaganych; vector< int > liczby(ile_liczb); iota(liczby.begin(), liczby.end(), 1); int nr_iteracji = 0; int ile_stabilnych = 0; bool odp = false; do { bool stabilna = czy_stabilna(liczby); if( stabilna ) { ile_stabilnych += 1; } if( ile_stabilnych == ile_wymaganych ) { odp = true; } } while( (!odp) && next_permutation( liczby.begin(), liczby.end() ) ); if( odp ) { cout << "TAK" << endl; for( auto l : liczby ) { cout << l << " "; } cout << endl; } else { cout << "NIE" << endl; } } |