题目链接:
这里其实考察的是二叉树。如果根节点从1开始,那么第i个节点的左右孩子就分别是2*i,2*i+1;如果访问到某个节点,则该节点的状态改变。状态只在开,关间转换。
AC代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
bool flag[1048579];
int main()
{
int D,I;
int lim;
int i;
int temp;
while(scanf("%d %d",&D, &I) != EOF)
{
memset(flag, 0, sizeof(flag));
if(!D && !I)
break;
lim = (int)pow(2.0,D);
i = 0;
while(I--)
{
i = 1;
while(true)
{
flag[i] = !flag[i];
if(flag[i])
temp = i + i;
else
temp = i + i + 1;
if(temp >= lim)
break;
i = temp;
}
}
printf("%d\n",i);
}
return 0;
}