开始我用的模拟,但会超时
学到一些小技巧
1<<D,即为2的D次方;
以后开最大值为maxn或maxd这样;
一个树结点是k,左子节点为2k,右子结点为2k+1;
后面书上说,可以模拟小球的奇偶性;
这道题真的是很有趣,当懂了之后;
只模拟最后一个小球,只模拟最后一个小球;
真的很有趣;
如果I为奇数,那么往左走,相应的I变成往左走的第(I+1)/2个点;
如果I为偶数,那么往右走,相应的I变成往右走的第I/2个点;
因为树总共有D层,所以走D-1次,所以循环i < D-1;
记得初始化k的值为一,因为从第一个点开始走
k = 1;
for(int i = 0; i < D-1; i++)
{
if(I%2){
k = 2*k;
I = (I+1)/2;
}
else{
k = 2*k+1;
I = I/2;
}
}