#include <bits/stdc++.h>
using namespace std;
const int R = 1e6 + 1;
const int Z[3][2] = {{'b','c'},{'a','c'},{'a','b'}};
const long long I = 1000000000000000001;
char s[R];
int main(){
int n;
long long k;
scanf("%d%lld",&n,&k);
long long x;
if(n > 59)x = I;
else x = (1LL << n) - 1;
if(k > x){
k -= x;
if(k > x){
k -= x;
if(k > x){
puts("NIE");
return 0;
}
else s[0] = 'c';
}
else s[0] = 'b';
}
else s[0] = 'a';
for(int i=1;i<n;i++){
if(k > 1){
--k;
long long x;
if(n - i > 59)x = I;
else x = (1LL << (n-i)) - 1;
if(k > x){
k -= x;
s[i] = Z[s[i-1]-'a'][1];
}
else s[i] = Z[s[i-1]-'a'][0];
}
else break;
}
printf("%s",s);
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 | #include <bits/stdc++.h> using namespace std; const int R = 1e6 + 1; const int Z[3][2] = {{'b','c'},{'a','c'},{'a','b'}}; const long long I = 1000000000000000001; char s[R]; int main(){ int n; long long k; scanf("%d%lld",&n,&k); long long x; if(n > 59)x = I; else x = (1LL << n) - 1; if(k > x){ k -= x; if(k > x){ k -= x; if(k > x){ puts("NIE"); return 0; } else s[0] = 'c'; } else s[0] = 'b'; } else s[0] = 'a'; for(int i=1;i<n;i++){ if(k > 1){ --k; long long x; if(n - i > 59)x = I; else x = (1LL << (n-i)) - 1; if(k > x){ k -= x; s[i] = Z[s[i-1]-'a'][1]; } else s[i] = Z[s[i-1]-'a'][0]; } else break; } printf("%s",s); return 0; } |
English