Dropping Balls UVA - 679(二叉树的遍历)

Posted caijiaming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dropping Balls UVA - 679(二叉树的遍历)相关的知识,希望对你有一定的参考价值。

题目链接:https://vjudge.net/problem/UVA-679

技术分享图片

 

技术分享图片

题目大意:t组样例,每组包括D M   层数是D   问第M个小球落在哪个叶子节点?    每个节点有开关  刚开始全都是关闭的,小球走到节点  节点开关变为与当前相反   每个小球从根节点释放

思路:这题是第一道二叉树遍历的题目,二叉树暴力模拟的确可以求出答案 ,但是很不幸,会超时

然后另一种方法,只需要求第M次小球就行了!  怎么求呢?   试想一下,如果M为奇数 那么从根节点开始看,肯定是往左走(M+1)/2次  往右走M/2次  但是最后一次肯定是往左走的 

同理,如果M是偶数  显然 往左走M/2次  往右走 M/2次   显然最后一次是往右走的    这就是做这题的思想了  然后往复此过程 !

看代码:

#include<iostream>
using namespace std;
int main()
{
    int t;
    int n,m;
    while(cin>>t)
    {
        if(t==-1) break;
        while(t--)
        {
            int ans=1;
            cin>>n>>m;
            for(int i=1;i<n;i++)//
            {
                if(m%2==1) //最后一次肯定往左子树走  且走的次数为(m+1)/2
                {
                    m=(m+1)/2;
                    ans=ans<<1;
                }
                else//往右子树走
                {
                    m=m/2;
                    ans=ans<<1|1;
                }
            }
            cout<<ans<<endl;
        }

    }
    return 0;
}

 

以上是关于Dropping Balls UVA - 679(二叉树的遍历)的主要内容,如果未能解决你的问题,请参考以下文章

UVa 679. Dropping Balls

UVa-679 Dropping Balls

小球下落 (Dropping Balls,UVA 679)

UVa 679 Dropping Balls (例题 6-6)

Dropping Balls UVA - 679(二叉树的遍历)

Uva--679 Dropping Balls(二叉树的编号)