一些小球从结点1处依次开始下落,最后一个小球将会落到哪里呢?输入叶子深度D和小球个数I,输出第I个小球最后所在的叶子编号。假设I不超过整棵树的叶子个数(即2^(D-1))。D<=20。输入最多包含1000组数据。
样例输入:
4 2
3 4
10 1
2 2
8 128
16 12345
样例输出:
12
7
512
3
255
36358
、
#include <iostream>
#include <string.h>
using namespace std;
int a[1000000];
int main()
{
int n,k,i,j,m;
while(cin>>n>>m)
{memset(a,0,sizeof(a));
for(i=0;i<m;i++)
{k=1;
for(j=0;j<n;j++)
{a[k]=!a[k];
k=a[k]?k*2:k*2+1;
}
}
cout<<k/2<<endl;
}
return 0;
}