TAPN - TAPN
Tác giả: hieult
Ngôn ngữ: C++
#include <stdio.h>
//#include <conio.h>
long long KQ(long long a[],long long n)
{
long long T=1;
for(long i=1;i<=n;i++)
{
if(a[i]==0)
T=T*2+1;
else T=T*3+1;
}
return T;
}
main()
{
long long C[33][33],a[33],n,m,t;
for(long i=0;i<=32;i++)
for(long j=0;j<=32;j++)
C[i][j]=0;
for(long i=0;i<=32;i++)
C[0][i]=1;
for(long i=1;i<=32;i++)
for(long j=0;j<=i;j++)
C[j][i]=C[j][i-1]+C[j-1][i-1];
while(scanf("%lld %lld",&n,&m)>0)
{
for(long i=1;i<=n;i++)
a[i]=0;
for(long i=0;i<=n;i++)
{
//printf("%lld ",m);
if(m<=C[i][n])
{
//printf("0 ");
t=i;
break;
}
else m=m-C[i][n];
}
//printf("1 ");
long u=n-1;
for(long i=t;i>=1;i--)
{
while(1)
{
if(m<=C[i-1][u])
{
a[n-u]=1;
u--;
break;
}
else
m=m-C[i-1][u];
u--;
}
}
printf("%lld\n",KQ(a,n));
}
//getch();
}