第一道二叉树的题。
- 给定一棵包含2^个结点的完全二叉树,如果把结点从上到下从左到右编号,则节点k的左右子节点编号分别为2k和2k+1。
- 对于这个题,第I个落到某个节点的球,如果I为奇数,则它是第(I+1)/2个落在左子节点的球。如果I为偶数,则它是第I/2个落在右子节点的球。
#include<cstdio>
using namespace std;
int main(void)
{
int l;
scanf("%d",&l);
while(l--)
{
int D,I,k=1;
scanf("%d %d",&D,&I);
for(int i=1;i<D;i++)
{
if(I%2)
{
k=k*2;
I=(I+1)/2;
}
else
{
k=k*2+1;
I=I/2;
}
}
printf("%d\n",k);
}
return 0;
}