zoukankan      html  css  js  c++  java
  • 小猴子下落

    有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点。

    一些小猴子从结点1处开始往下跑,最后一个小猴儿会跑到哪里呢?

    http://acm.nyist.net/JudgeOnline/problem.php?pid=63

    根据二叉树的性质,对于一内节点k,其孩子节点为2*k和2*k+1。

    #include<iostream>
    #include<cmath>

    #include<cstring>
    using namespace std;
    int main()
    {
        int D,I,n;
        int a[1<<20];
        cin>>D>>I;
        long k=1;
        while(D!=0&&I!=0)
        {
            n=(1<<D)-1;
            memset(a,0,sizeof(a));
            for(int i=0;i<I;i++)
            {
                k=1;
                for(;;)
                {
                    a[k]=!a[k];
                    if(a[k])
                    {
                        k=2*k;
                    }
                    else
                    {
                        k=2*k+1;
                    }
                    if(k>n)
                        break;
                }
            }
            cout<<k/2<<endl;
            cin>>D>>I;
        }
        return 0;
    }

  • 相关阅读:
    centos7 下载并安装.netcore SKD,运行.netcore 应用程序
    小网站到大网站架构的演化之路 学习总结
    suppersocke,websocket 功能学习总结
    定时任务 quartZ
    RabbitMQ 安装和功能点
    rabbitmq 发送 消费消息
    富文本编辑器
    vue AES加密解密
    css动画库
    el-table合并表格
  • 原文地址:https://www.cnblogs.com/hutao886/p/4496301.html
Copyright © 2011-2022 走看看