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;
    }

  • 相关阅读:
    基于HTTP和TFTP的PXE批量自动化安装Linux系统
    使用U盘进行Linux系统的安装
    CentOS 7单用户模式修改root密码
    LVS的调度算法分析
    linux LVS DR模式配置
    Nagios的客户端的安装
    Nagios监控系统的安装
    Linux内核升级
    redhat linux使用Centos yum源
    Juniper srx防火墙NAT配置
  • 原文地址:https://www.cnblogs.com/hutao886/p/4496301.html
Copyright © 2011-2022 走看看