这道题如果去天真的模拟就跪了,于是就想到找什么规律。其实每一个节点是第几次到第几个节点都是有规律可以找到的。
比如说从出发根节点:只能是第偶数个节点到右子树,奇数个到左子树。这样的话直接一层一层的查找最后一个节点就可以了
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
int t;
while(scanf("%d",&t)!=EOF&&t!=-1)
{
for(int i=0; i<t; i++)
{
int deep;
scanf("%d%d",&deep,&n);
int s=1;
for(int i=0; i<deep-1; i++)
{
if(n%2==0)
{
s=s*2+1;
n=n/2;
}
else
{
s=s*2;
n=(n+1)/2;
}
}
printf("%d\n",s);
}
}
}