#include <iostream> #include <vector> using namespace std; long long int potega( long long int a, int wyk ) { if ( wyk == 0 ) return 1; if ( wyk > 60 ) return potega( a, 60 ); if ( wyk % 2 == 1 ) { long long int wynik = potega( a, wyk - 1 ) * a; //cout<<wynik<<endl; return wynik; } long long int t = potega( a, wyk/2 ); //cout<<t*t; return t * t; } char nast( char ch, int a ) { if ( ch == 'a' ) { if ( a ) return 'c'; return 'b'; } else if ( ch == 'b' ) { if ( a ) return 'c'; return 'a'; } else if ( ch == 'c' ) { if ( a ) return 'b'; return 'a'; } } int main() { long long int n; long long int k; cin>>n>>k; long long int pot = potega( 2, n ); long long int ile = pot - 1; //cout<<ile; //cout<<ile; //cout<<ile<<" "; int licz = 0; while( k > ile ) { k -= ile; licz++; } //cout<<licz; if ( licz <= 2 ) { char ch = 'a' + licz; string s; s += ch; while ( k > 1 ) { //cout<<s<<endl; if ( n > 60 ) { n--; } else { pot /= 2; } ile = pot; int wsk = 0; if ( k > ile ) { k -= ile; wsk = 1; } else { k--; } char klucz = s[ s.size() - 1 ]; s += nast( klucz, wsk ); } cout<<s; } else { cout<<"NIE"; } 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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #include <iostream> #include <vector> using namespace std; long long int potega( long long int a, int wyk ) { if ( wyk == 0 ) return 1; if ( wyk > 60 ) return potega( a, 60 ); if ( wyk % 2 == 1 ) { long long int wynik = potega( a, wyk - 1 ) * a; //cout<<wynik<<endl; return wynik; } long long int t = potega( a, wyk/2 ); //cout<<t*t; return t * t; } char nast( char ch, int a ) { if ( ch == 'a' ) { if ( a ) return 'c'; return 'b'; } else if ( ch == 'b' ) { if ( a ) return 'c'; return 'a'; } else if ( ch == 'c' ) { if ( a ) return 'b'; return 'a'; } } int main() { long long int n; long long int k; cin>>n>>k; long long int pot = potega( 2, n ); long long int ile = pot - 1; //cout<<ile; //cout<<ile; //cout<<ile<<" "; int licz = 0; while( k > ile ) { k -= ile; licz++; } //cout<<licz; if ( licz <= 2 ) { char ch = 'a' + licz; string s; s += ch; while ( k > 1 ) { //cout<<s<<endl; if ( n > 60 ) { n--; } else { pot /= 2; } ile = pot; int wsk = 0; if ( k > ile ) { k -= ile; wsk = 1; } else { k--; } char klucz = s[ s.size() - 1 ]; s += nast( klucz, wsk ); } cout<<s; } else { cout<<"NIE"; } return 0; } |