#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; } |