#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
                    English