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