#include <iostream>
#include <cstdio>
using namespace std;
long long t[70], k, p, q;
int n;
char c;
bool b;
void znajdz(long long p, long long q, char x)
{
if(k==p) return;
p+=1;
long long mid=(p+q)/2;
if(k<=mid)
{
if(x=='a')
{
printf("%c", 'b');
znajdz(p,mid, 'b');
}
else
{
printf("%c", 'a');
znajdz(p,mid,'a');
}
}
else
{
if(x=='c')
{
printf("%c", 'b');
znajdz(mid+1,q, 'b');
}
else
{
printf("%c", 'c');
znajdz(mid+1,q,'c');
}
}
}
int main()
{
t[1]=1;
for(int i=2;i<=61;i++) t[i]=t[i-1]*2+1;
scanf("%d", &n);
scanf("%d", &k);
if(n>59)
{
printf("%c", 'a');
n-=1;
p+=1;
b=1;
while(n>59 && p!=k)
{
n-=1;
p+=1;
if(b) printf("%c", 'b');
else printf("%c", 'a');
b=!b;
}
n=100;
q=t[60];
if(b) c='b';
else c='a';
}
else if(k<=t[n])
{
p=1;
q=t[n];
printf("%c", 'a');
c='a';
}
else if(k<=t[n]*2)
{
p=t[n]+1;
q=2*t[n];
printf("%c", 'b');
c='b';
}
else if(k<=t[n]*3)
{
p=2*t[n]+1;
q=3*t[n];
printf("%c", 'c');
c='c';
}
if(k<=3*t[n] || n==100)
{
if(p<k) znajdz(p,q,c);
}
else printf("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 | #include <iostream> #include <cstdio> using namespace std; long long t[70], k, p, q; int n; char c; bool b; void znajdz(long long p, long long q, char x) { if(k==p) return; p+=1; long long mid=(p+q)/2; if(k<=mid) { if(x=='a') { printf("%c", 'b'); znajdz(p,mid, 'b'); } else { printf("%c", 'a'); znajdz(p,mid,'a'); } } else { if(x=='c') { printf("%c", 'b'); znajdz(mid+1,q, 'b'); } else { printf("%c", 'c'); znajdz(mid+1,q,'c'); } } } int main() { t[1]=1; for(int i=2;i<=61;i++) t[i]=t[i-1]*2+1; scanf("%d", &n); scanf("%d", &k); if(n>59) { printf("%c", 'a'); n-=1; p+=1; b=1; while(n>59 && p!=k) { n-=1; p+=1; if(b) printf("%c", 'b'); else printf("%c", 'a'); b=!b; } n=100; q=t[60]; if(b) c='b'; else c='a'; } else if(k<=t[n]) { p=1; q=t[n]; printf("%c", 'a'); c='a'; } else if(k<=t[n]*2) { p=t[n]+1; q=2*t[n]; printf("%c", 'b'); c='b'; } else if(k<=t[n]*3) { p=2*t[n]+1; q=3*t[n]; printf("%c", 'c'); c='c'; } if(k<=3*t[n] || n==100) { if(p<k) znajdz(p,q,c); } else printf("NIE"); return 0; } |
English