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.
 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;
}