题意:这道题规律性极强,虽然是二叉树,但是可以用模拟来写。
1<<20 意思是1的二进制左移20位,即2的20次方。
对于二叉树中一个节点 k ,其左节点,右节点的编号分别是2k 和 2k + 1。
#include<cstdio>
#include<cstring> const int maxn = ; int s[<<]; int main()
{
int d,l;
while(scanf("%d%d",&d,&l) != EOF){
memset(s,,sizeof(s)); int k ,n;
n = (<<d) - ;
for(int i = ;i < l; i++){
k = ;
while(){
s[k] = !s[k];
k = s[k] ? *k : *k + ;
if(k > n) break;
}
}
printf("%d\n",k/);
}
return ;
}