给你一棵深度为D的满二叉树,给你I个球,初始所有的节点都是关闭的,如果节点是关闭的则球向左走,否则向右走,每个节点被球接触后节点开关被打开。问,最后一个小球落在哪个叶节点上.
D为深度,I为球的数量.
里面有两处很秀,不愧是刘汝佳大佬
#include<cstdio>
#include<cstring>
const int maxd=20;
int s[1<<maxd];//很秀
int main(){
int D ,I;
while (2 == scanf("%d%d", &D, &I)){
memset(s,0,sizeof(s));
int k,n=(1<<D)-1;
for(int i=0;i<I;i++){
k=1;
for(;;)
{
s[k]=!s[k];//很秀
k=s[k]?k*2:k*2+1;
if(k>n)
break;
}
}
printf("%d\n",k/2);
}
return 0;
};