Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
#include <iostream> #include <cmath> #include <algorithm> #include <vector> #include <string> using namespace std; typedef long long ll; ll binpow(ll a,ll b) { if (b==0) return 1; if (b%2==0) { ll res=binpow(a,b/2); return res*res; } else return binpow(a,b-1)*a; } ll factorial_a_b(ll a,ll b) { ll res=1; for (ll i=a;i<=b;i++) res*=i; return res; } ll number(ll cur) { ll res=0; while((1LL<<res)<cur) res++; return res-1; } int main() { ll n=0,k=0; cin >> n >> k; vector<pair<char,char> > letters(3); letters[0]=make_pair('b','c'); letters[1]=make_pair('a','c'); letters[2]=make_pair('a','b'); if (n <= 59 && 3*binpow(2,n)-3 < k) cout << "NIE"; else { string ans=""; ll qwerty = n < 62 ? (binpow(2,n)-1) : (long long)3e18; // - qaz = binpow(2,n)-1 // + qaz = n < 62 ? (binpow(2,n)-1) : (long long)6e18 //��������� ������ ����� �������� ����� if (2*(qwerty) >= k && k > qwerty) { ans.push_back('b'); k-=qwerty; } else if (k <= qwerty) { ans.push_back('a'); } else { ans.push_back('c'); k-=2*(qwerty); } k--; //���������� ������ ����� � ��������� ����� k for (int ind=2;ind<=n;ind++) { //��������� ������� ����� // � ��� �������� �����, ������ n-ind+1 ����, //������� ��������� ����� ����� s[ind-1] // ll _q = (((n-ind+1) < 62) ? (1LL << (n-ind+1)) : (long long)6e18) ll _q = (((n-ind+1) < 62) ? ((1LL << (n-ind+1))-1) : (long long)3e18); if (k > _q) { ans.push_back(letters[ans[ind-2]-'a'].second); k-=_q; k--; } else if (k!=0) { ans.push_back(letters[ans[ind-2]-'a'].first); k--; } } cout << ans; } system("pause"); 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 84 85 86 87 88 89 90 | #include <iostream> #include <cmath> #include <algorithm> #include <vector> #include <string> using namespace std; typedef long long ll; ll binpow(ll a,ll b) { if (b==0) return 1; if (b%2==0) { ll res=binpow(a,b/2); return res*res; } else return binpow(a,b-1)*a; } ll factorial_a_b(ll a,ll b) { ll res=1; for (ll i=a;i<=b;i++) res*=i; return res; } ll number(ll cur) { ll res=0; while((1LL<<res)<cur) res++; return res-1; } int main() { ll n=0,k=0; cin >> n >> k; vector<pair<char,char> > letters(3); letters[0]=make_pair('b','c'); letters[1]=make_pair('a','c'); letters[2]=make_pair('a','b'); if (n <= 59 && 3*binpow(2,n)-3 < k) cout << "NIE"; else { string ans=""; ll qwerty = n < 62 ? (binpow(2,n)-1) : (long long)3e18; // - qaz = binpow(2,n)-1 // + qaz = n < 62 ? (binpow(2,n)-1) : (long long)6e18 //��������� ������ ����� �������� ����� if (2*(qwerty) >= k && k > qwerty) { ans.push_back('b'); k-=qwerty; } else if (k <= qwerty) { ans.push_back('a'); } else { ans.push_back('c'); k-=2*(qwerty); } k--; //���������� ������ ����� � ��������� ����� k for (int ind=2;ind<=n;ind++) { //��������� ������� ����� // � ��� �������� �����, ������ n-ind+1 ����, //������� ��������� ����� ����� s[ind-1] // ll _q = (((n-ind+1) < 62) ? (1LL << (n-ind+1)) : (long long)6e18) ll _q = (((n-ind+1) < 62) ? ((1LL << (n-ind+1))-1) : (long long)3e18); if (k > _q) { ans.push_back(letters[ans[ind-2]-'a'].second); k-=_q; k--; } else if (k!=0) { ans.push_back(letters[ans[ind-2]-'a'].first); k--; } } cout << ans; } system("pause"); return 0; } |