码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-01 21:08:20      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:col   树的遍历   mes   else   释放   pac   关闭   com   bre   

题目链接: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(二叉树的遍历)

标签:col   树的遍历   mes   else   释放   pac   关闭   com   bre   

原文地址:https://www.cnblogs.com/caijiaming/p/10346951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!