TAPN - TAPN
Tác giả: RR
Ngôn ngữ: C++
//Written by RR
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#define MAXN 32
#define FOR(i,a,b) for(typeof(a) i=a; i<=b; i++)
#define FORD(i,a,b) for(typeof(a) i=a; i>=b; i--)
using namespace std;
long n,bit[MAXN];
long long m,res,c[MAXN][MAXN];
void init() {
c[0][0]=1;
FOR(i,1,MAXN-1) {
c[i][0]=1;
FOR(j,1,MAXN-1)
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
}
void solve() {
long k=0;
while (c[n][k]<m) {
m-=c[n][k];
k++;
}
m=c[n][k]-m+1;
long len=n;
FOR(i,1,n) {
if (c[len-1][k]>=m) bit[i]=0;
else {m-=c[len-1][k]; bit[i]=1; k--; }
len--;
}
res=1;
FOR(i,1,n)
if (bit[i]==0) res=res*2+1;
else res=res*3+1;
cout<<res<<"\n";
}
int main() {
#ifdef DEBUG
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
init();
while (scanf("%ld %lld",&n,&m)==2)
solve();
return 0;
}