题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=63
题目解析:简单的模拟题,节点k的左右儿子分别是2*k和2*k+1,可以开一个数组进行模拟。
代码如下:
01.
#include<cstdio>
02.
#include<cstring>
03.
const
int
Max=20;
04.
int
s[1<<Max];
05.
int
main()
06.
{
07.
int
D,I;
08.
while
(
scanf
(
"%d%d"
,&D,&I)!=EOF&&(D+I))
09.
{
10.
int
n=(1<<D)-1;
//最大节点的编号
11.
int
k;
12.
memset
(s,0,
sizeof
(s));
13.
while
(I--)
14.
{
15.
k=1;
16.
for
(;;)
17.
{
18.
s[k]=!s[k];
19.
k=s[k]?k*2:k*2+1;
20.
if
(k>n)
break
;
21.
}
22.
}
23.
printf
(
"%d\n"
,k/2);
24.
}
25.
return
0;
26.
}