Dropping Balls UVA

来源:互联网 发布:linux centos 6.5 编辑:程序博客网 时间:2024/06/15 11:30

这道题如果去天真的模拟就跪了,于是就想到找什么规律。其实每一个节点是第几次到第几个节点都是有规律可以找到的。

比如说从出发根节点:只能是第偶数个节点到右子树,奇数个到左子树。这样的话直接一层一层的查找最后一个节点就可以了

AC代码:

#include<bits/stdc++.h>using namespace std;int n;int main(){    int t;    while(scanf("%d",&t)!=EOF&&t!=-1)    {        for(int i=0; i<t; i++)        {            int deep;            scanf("%d%d",&deep,&n);            int s=1;            for(int i=0; i<deep-1; i++)            {                if(n%2==0)                {                    s=s*2+1;                    n=n/2;                }                else                {                    s=s*2;                    n=(n+1)/2;                }            }            printf("%d\n",s);        }    }}