乍一看完全二叉树用一个数组模拟一下就行了,实则如此做复杂度太高。
其实每个根都有两种状态,相邻的小球肯定去了不同的子树,比如4个球就有两个去了左子树,两个去了右子树。那么对于分别的子树来说,就相当于有两个球来到了这个子树的根,所以不用模拟,结果只跟奇偶性有关。
//UVa 679 完全二叉树
int main(){
int D,I,n;
while(scanf("%d",&n)!=EOF&&n!=-1){
while(n--){
scanf("%d%d",&D,&I);
int k=1;
for(int i=0;i<D-1;i++){
if(I%2) {k=k*2;I=(I+1)/2;}
else {k = k*2+1;I/=2;}
}
printf("%d\n",k);
}
}
return 0;
}