#include <stdio.h>
using namespace std;
char left_letter(char letter) {
if (letter == 'a') return 'b';
return 'a';
}
char right_letter(char letter) {
if (letter == 'c') return 'b';
return 'c';
}
int main() {
int n;
long long int k;
scanf("%d", &n);
scanf("%lld", &k);
if (n > 60) {
char prev_letter = 'a';
while (n > 60 && k > 0) {
printf("%c", prev_letter);
prev_letter = left_letter(prev_letter);
n--;
k--;
}
if (k > 0) {
unsigned long long int left_words_num = ((unsigned long long int) 1 ) << n;
while (k > 0) {
printf("%c", prev_letter);
left_words_num = (left_words_num >> 1);
if (k == 1) {
k = 0;
}
else if (k <= left_words_num) {
prev_letter = left_letter(prev_letter);
k--;
}
else {
prev_letter = right_letter(prev_letter);
k = k - left_words_num;
}
}
}
printf("\n");
}
else {
unsigned long long int max_words = (((unsigned long long int) 1 ) << n ) - 1;
char first_letter = 'a';
while (k > max_words) {
k = k - max_words;
first_letter++;
if (first_letter > 'c') {
printf("NIE\n");
return 0;
}
}
char prev_letter = first_letter;
long long int left_words_num = max_words + 1;
while (k > 0) {
printf("%c", prev_letter);
left_words_num = (left_words_num >> 1);
if (k == 1) {
k = 0;
}
else if (k <= left_words_num) {
prev_letter = left_letter(prev_letter);
k--;
}
else {
prev_letter = right_letter(prev_letter);
k = k - left_words_num;
}
}
printf("\n");
}
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 | #include <stdio.h> using namespace std; char left_letter(char letter) { if (letter == 'a') return 'b'; return 'a'; } char right_letter(char letter) { if (letter == 'c') return 'b'; return 'c'; } int main() { int n; long long int k; scanf("%d", &n); scanf("%lld", &k); if (n > 60) { char prev_letter = 'a'; while (n > 60 && k > 0) { printf("%c", prev_letter); prev_letter = left_letter(prev_letter); n--; k--; } if (k > 0) { unsigned long long int left_words_num = ((unsigned long long int) 1 ) << n; while (k > 0) { printf("%c", prev_letter); left_words_num = (left_words_num >> 1); if (k == 1) { k = 0; } else if (k <= left_words_num) { prev_letter = left_letter(prev_letter); k--; } else { prev_letter = right_letter(prev_letter); k = k - left_words_num; } } } printf("\n"); } else { unsigned long long int max_words = (((unsigned long long int) 1 ) << n ) - 1; char first_letter = 'a'; while (k > max_words) { k = k - max_words; first_letter++; if (first_letter > 'c') { printf("NIE\n"); return 0; } } char prev_letter = first_letter; long long int left_words_num = max_words + 1; while (k > 0) { printf("%c", prev_letter); left_words_num = (left_words_num >> 1); if (k == 1) { k = 0; } else if (k <= left_words_num) { prev_letter = left_letter(prev_letter); k--; } else { prev_letter = right_letter(prev_letter); k = k - left_words_num; } } printf("\n"); } return 0; } |
English