#include<iostream>
using namespace std;
typedef unsigned long long ull;
ull tab[100];
ull pot(int i)
{
if(i>60)
i=60;
return tab[i];
}
char zn(int a, char p)
{
if(a==0)
{
if(p=='c')
return 'a';
if(p=='a')
return 'b';
if(p=='b')
return 'a';
}
if(p=='c')
return 'b';
if(p=='b')
return 'c';
return 'c';
}
int main()
{
ios_base::sync_with_stdio(0);
ull n, k, i, x;
char p;
tab[0]=1;
for(i=1; tab[i-1] < 1e18; i++)
{
tab[i]=tab[i-1]<<1;
//cout << i << " " << tab[i] << "\n";
}
cin >> n >> k;
x=pot(n)-1;
if(k <= x)
{
cout << "a";
p='a';
}
else if(k <= 2*x)
{
cout << "b";
p='b';
k-=x;
}
else if(k <= 3*x)
{
cout << "c";
p='c';
k-=2*x;
}
else
{
cout << "NIE";
k=1;
}
n--;
k--;
while(k > 0)
{
k--;
x=pot(n)-1;
if(k < x)
p = zn(0, p);
else
{
k-=x;
p = zn(1, p);
//cout << "A";
}
cout << p;
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 85 86 87 | #include<iostream> using namespace std; typedef unsigned long long ull; ull tab[100]; ull pot(int i) { if(i>60) i=60; return tab[i]; } char zn(int a, char p) { if(a==0) { if(p=='c') return 'a'; if(p=='a') return 'b'; if(p=='b') return 'a'; } if(p=='c') return 'b'; if(p=='b') return 'c'; return 'c'; } int main() { ios_base::sync_with_stdio(0); ull n, k, i, x; char p; tab[0]=1; for(i=1; tab[i-1] < 1e18; i++) { tab[i]=tab[i-1]<<1; //cout << i << " " << tab[i] << "\n"; } cin >> n >> k; x=pot(n)-1; if(k <= x) { cout << "a"; p='a'; } else if(k <= 2*x) { cout << "b"; p='b'; k-=x; } else if(k <= 3*x) { cout << "c"; p='c'; k-=2*x; } else { cout << "NIE"; k=1; } n--; k--; while(k > 0) { k--; x=pot(n)-1; if(k < x) p = zn(0, p); else { k-=x; p = zn(1, p); //cout << "A"; } cout << p; n--; } return 0; } |
English