#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n,k;
cin>>n>>k;
long long pom=1,pom2=1;
string wyn;
bool czujka=0;
for(int i=2;i<=n;i++)
{
pom*=2;
pom2+=pom;
//cout<<pom2<<" ";
if(pom2>k)
{
//cout<<"d ";
czujka=1;
pom2--;
pom2/=2;
pom/=2;
if(wyn[ wyn.size()-1]!='a')
wyn+="a";
else
wyn+="b";
k--;
}
if(k==0)
{
break;
}
}
//cout<<pom2<<" ";
if(!czujka)
{
if(k>3*pom2)
{
cout<<"NIE\n";
return 0;
}
else if(k>2*pom2)
{
wyn+="c";
k-=2*pom2;
k--;
pom2/=2;
}
else if(k>pom2)
{
wyn+="b";
k-=pom2;
k--;
pom2/=2;
}
else
{
wyn+="a";
k--;
pom2/=2;
}
}
// cout<<czujka<<" "<<wyn<<" "<<pom2<<" "<<k<<"\n";
while(k!=0)
{
if(k<=pom2)
{
if(wyn[ wyn.size()-1 ]=='c'||wyn[ wyn.size()-1]=='b')
{
wyn+="a";
pom2/=2;
k--;
}
else
{
wyn+="b";
pom2/=2;
k--;
}
// cout<<"\lewo "<<pom2<<" "<<k<<"\n";
}
else
{
if(wyn[ wyn.size() -1]=='a'||wyn[wyn.size()-1]=='b')
{
wyn+="c";
}
else
{
wyn+="b";
}
k-=pom2;
k--;
pom2/=2;
//cout<<"\nprawo "<<pom2<<" "<<k<<"\n";
}
}
cout<<wyn<<"\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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #include <iostream> #include <string> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n,k; cin>>n>>k; long long pom=1,pom2=1; string wyn; bool czujka=0; for(int i=2;i<=n;i++) { pom*=2; pom2+=pom; //cout<<pom2<<" "; if(pom2>k) { //cout<<"d "; czujka=1; pom2--; pom2/=2; pom/=2; if(wyn[ wyn.size()-1]!='a') wyn+="a"; else wyn+="b"; k--; } if(k==0) { break; } } //cout<<pom2<<" "; if(!czujka) { if(k>3*pom2) { cout<<"NIE\n"; return 0; } else if(k>2*pom2) { wyn+="c"; k-=2*pom2; k--; pom2/=2; } else if(k>pom2) { wyn+="b"; k-=pom2; k--; pom2/=2; } else { wyn+="a"; k--; pom2/=2; } } // cout<<czujka<<" "<<wyn<<" "<<pom2<<" "<<k<<"\n"; while(k!=0) { if(k<=pom2) { if(wyn[ wyn.size()-1 ]=='c'||wyn[ wyn.size()-1]=='b') { wyn+="a"; pom2/=2; k--; } else { wyn+="b"; pom2/=2; k--; } // cout<<"\lewo "<<pom2<<" "<<k<<"\n"; } else { if(wyn[ wyn.size() -1]=='a'||wyn[wyn.size()-1]=='b') { wyn+="c"; } else { wyn+="b"; } k-=pom2; k--; pom2/=2; //cout<<"\nprawo "<<pom2<<" "<<k<<"\n"; } } cout<<wyn<<"\n"; } |
English