ACM掉球

时间:2012-01-23 17:17:34

标签: c algorithm

以下是我从链接http://progspedia.blogspot.com/2011/05/679-dropping-balls.html#comment-form

复制的代码
#include<stdio.h>

int main()
{
    int t,D,I,P,i,j;
    //freopen("in.txt","r",stdin);

    while(scanf("%d",&t)==1&&t>0)
    {
        for(i=0;i<t;i++)
        {
            scanf("%d%d",&D,&I);
            P=1;D--;

            for (j=0;j<D;j++)
            {
                P= I&1 ? (P<<1) : (P<<1)+1;
                I=(I+1)>>1;
            }
            printf("%d\n",P);
        }
    }
    return 0;
}

代码运行完美,但我不明白这段代码如何跟踪我们必须在第1级之后去哪个子树的东西。如果有人帮助我,那对我来说非常有帮助。

问题的链接是http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=620

1 个答案:

答案 0 :(得分:1)

P跟踪特定节点(以及子树)

这里做出了遍历决定。

            P= I&1 ? (P<<1) : (P<<1)+1;