#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
const ll inf = 1000000000000000005LL;
const int maxn = 1000005;
ll d[maxn];
void print(int j) {
static int last = 3;
char next[][3] = {{'b', 'c', '\0'}, {'a', 'c', '\0'}, {'a', 'b', '\0'}, {'a', 'b', 'c'}};
char c = next[last][j];
putchar(c);
last = c - 'a';
}
void printSolution(int n, ll k) {
d[n] = 1;
for(int i = n - 1; i >= 1; --i) {
d[i] = min(inf, d[i + 1] * 2 + 1);
}
if(k > d[1] * 3) {
printf("NIE");
}
else {
int j = 0;
while(j < 3 && k > d[1]) {
k -= d[1];
j++;
}
print(j);
for(int i = 2; i <= n; ++i) {
if(--k == 0)
return;
j = (k > d[i]);
if(j) k -= d[i];
print(j);
}
}
}
int main() {
ll k;
int n;
scanf("%d%lld", &n, &k);
printSolution(n, k);
printf("\n");
}
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 | #include <cstdio> #include <algorithm> #include <vector> using namespace std; typedef long long ll; const ll inf = 1000000000000000005LL; const int maxn = 1000005; ll d[maxn]; void print(int j) { static int last = 3; char next[][3] = {{'b', 'c', '\0'}, {'a', 'c', '\0'}, {'a', 'b', '\0'}, {'a', 'b', 'c'}}; char c = next[last][j]; putchar(c); last = c - 'a'; } void printSolution(int n, ll k) { d[n] = 1; for(int i = n - 1; i >= 1; --i) { d[i] = min(inf, d[i + 1] * 2 + 1); } if(k > d[1] * 3) { printf("NIE"); } else { int j = 0; while(j < 3 && k > d[1]) { k -= d[1]; j++; } print(j); for(int i = 2; i <= n; ++i) { if(--k == 0) return; j = (k > d[i]); if(j) k -= d[i]; print(j); } } } int main() { ll k; int n; scanf("%d%lld", &n, &k); printSolution(n, k); printf("\n"); } |
English