// slo.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <string>
using namespace std;
bool ok = false;
void gen_word(string &s, int max_tot_len, long long idx_in_suffixes)
{
if(idx_in_suffixes == 0) {
cout << s << endl;
ok = true;
return;
} else
idx_in_suffixes--;
if(s.size() < max_tot_len) {
for(char next_char = 'a'; next_char <= 'c'; next_char++) {
if(!s.empty() && s[s.size()-1]==next_char)
continue;
long long tot_num_with_curr_start = max_tot_len - s.size() <= 60 ? (1LL << (max_tot_len - s.size())) - 1LL : ((1LL << 62) + (1LL << 61));
if(idx_in_suffixes >= tot_num_with_curr_start) {
idx_in_suffixes -= tot_num_with_curr_start;
} else {
s.push_back(next_char);
gen_word(s, max_tot_len, idx_in_suffixes);
break;
}
}
}
}
int main(int argc, char* argv[])
{
int n;
long long k;
cin >> n >> k;
string s = "";
gen_word(s, n, k);
if(!ok)
cout << "NIE\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 | // slo.cpp : Defines the entry point for the console application. // #include <iostream> #include <string> using namespace std; bool ok = false; void gen_word(string &s, int max_tot_len, long long idx_in_suffixes) { if(idx_in_suffixes == 0) { cout << s << endl; ok = true; return; } else idx_in_suffixes--; if(s.size() < max_tot_len) { for(char next_char = 'a'; next_char <= 'c'; next_char++) { if(!s.empty() && s[s.size()-1]==next_char) continue; long long tot_num_with_curr_start = max_tot_len - s.size() <= 60 ? (1LL << (max_tot_len - s.size())) - 1LL : ((1LL << 62) + (1LL << 61)); if(idx_in_suffixes >= tot_num_with_curr_start) { idx_in_suffixes -= tot_num_with_curr_start; } else { s.push_back(next_char); gen_word(s, max_tot_len, idx_in_suffixes); break; } } } } int main(int argc, char* argv[]) { int n; long long k; cin >> n >> k; string s = ""; gen_word(s, n, k); if(!ok) cout << "NIE\n"; return 0; } |
English