同个人网站 https://www.serendipper-x.cn/,欢迎访问 !

问题描述:
有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为 1,2,3,… ,2D - 1。在结点1处放一个小球,它会往下落。每个内结点上都有一个开关,初始全部关闭,当每次由小球落到一个开关上时,状态都会改变。当小球到达一个内结点时,如果该结点上的开关关闭,则往左走,否则往右走,直到走到叶子结点,如图所示。

一些小球从结点1处下落,最后一个小球将会落到哪里呢?输入叶子深度 D 和小球个数 I,输出第 I 个小球最后所在的叶子编号。假设 I 不超过整棵树的叶子个数,D ≤ 20。

tips:
给定一颗包含2d个结点(其中d为树的高度)的完全二叉树,如果把结点从上到下从左到右编号为1,2,3……,则结点k的左右子结点编号分别为2k2k+1

Python:

while True:try:D, I = list(map(int, input().split()))n = (1<<D) - 1   # n是最大结点编号s = [False for _ in range (1<<20)]  # 初始值都为假for i in range (I):k = 1while True:s[k] = ~s[k]  # 状态改变if s[k] == 0:k = 2 * k + 1else:k = 2 * kif k > n:   # 出界breakprint (k//2)  # 出界之前的叶子编号except:break

C:

#include<cstdio>
#include<cstring>const int maxd = 20;
int main() {int D, I;while(scanf("%d%d", &D, &I) == 2) {memset(s, 0, sizeof(s));int k, n = (1<<D)-1;for(int i = 0; i < I; i++) {k = 1;for(;;) {s[k] = !s[k];k = s[k] ? k*2 : k*2+1;if(k > n) break;}}printf("%d\n", k/2);}return 0;
}

如果使用题目中给的编号 I,则当 I 是奇数时,它是往左走的的第(I+1)/ 2个小球;当 I 是偶数时,它是往右走的第 I/2 个小球。这样,可以直接模拟最后一个小球的路线:

while(scanf("%d%d", &D, &I) == 2) {int k = 1;for(int i = 0; i < D-1; i++) {if(I%2) {k = k*2;I = (I+1) / 2;}else {k = k*2+1;I /= 2;}printf("%d\n", k)}
}

算法竞赛入门经典 例题6-6 小球下落(python、C)相关推荐

  1. 古老的密码(Ancient Cipher,UVa1339)(算法竞赛入门经典 例题4-1)C++

    题目:给定两个不超过100的字符串,判断是否可以做到将其中一个字符串通过重排和映射的操作,使得两个字符串相同.例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后每个字母只要通过一次映射 ...

  2. 算法竞赛入门经典 例题6-2 铁轨(C、python)

    同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 问题描述: 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为 1~n .你的任务 ...

  3. 算法竞赛入门经典 例题6-21

    UVa506 System Dependencies 编写程序实现类似Linux下的软件包管理器,其工作方式为: 可以通过命令显式安装组件,这个过程也可能隐式安装依赖组件 如果没有其它组件仍然依赖一个 ...

  4. 算法竞赛入门经典 例题6-16

    刷题荒废了一个多月,今日了却一件事情,把此题补上! UVa10129 Play on Words 有若干个圆盘,每个圆盘上都有一个单词,判断这些圆盘是否能排成一排,使得相邻圆盘的首尾字母相同. 3年前 ...

  5. C++ 刽子手游戏(Hangman Judge, UVa 489)(算法竞赛入门经典例题4-2)

    题目:刽子手游戏是一个简单的猜单词游戏,每次可以猜一个字母,如果单词内有这个字母,此单词内所有该字母都会显示,如果没有该字母,则记一笔错误,若满7笔错误,则输掉()猜已经猜出的单词也算错误).本题编写 ...

  6. Java实现算法竞赛入门经典例题-蚂蚁

    问题描述 一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒. 当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计). 给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂 ...

  7. UVA-814 邮件传输代理的交互 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 #include<iostream> #include< ...

  8. UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...

  9. UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...

最新文章

  1. plasma桌面设置好的面板消失了_Ubuntu Studio 将用 KDE Plasma 桌面环境替换 Xfce | Linux 中国...
  2. grub安装的 三种安装方式
  3. 反思深度思考:预热[准备] 高密度[压力专注] 辨真伪[冷静分析] 反推[灵活] 结构化[全局]
  4. 【RabbitMQ】5、RabbitMQ任务分发机制
  5. Spark提交任务参数详解
  6. yii 下 session 丢失的问题
  7. Flink CDC 系列 - 构建 MySQL 和 Postgres 上的 Streaming ETL
  8. 博弈论——斐波那契博弈Fibonacci Game
  9. 开机LOGO与动画修改
  10. Java软件开发流程
  11. tomcat是干什么的
  12. RK3128-android7.1-物联网模块GM196
  13. Kotlin与Java的异同
  14. java发出声音_Java播放声音的几种方式
  15. C语言实现植物大战僵尸----学习过程
  16. ubuntu使用fdisk分区
  17. laravel5实现第三方登录(微信)
  18. 华为服务器文件升级失败,升级连接服务器失败
  19. android内存最小版本下载,猫和老鼠精简版下载-猫和老鼠内存最小版下载v6.6.1 安卓版-芒果手游网...
  20. 小姐姐太强了,动图展示 10 大 Git 命令,不会都难

热门文章

  1. LeetCode 第 21 场双周赛(779/1913,前40.7%)
  2. 数据结构--队列Queue--循环顺序队列
  3. 在微型计算机中8m,第一部分 计算机基础知识部分习题(答案)
  4. ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!
  5. wpf计算字符大小占像素_LCD作为终端显示字符串的过程
  6. php请求来源,php验证请求页面来源
  7. 美团NLP中心算法实习生招聘
  8. 微软中山大学开源超强的视觉位置编码,涨点显著
  9. 预训练模型的前世今生(有福利!)
  10. 怎样高效阅读一份深度学习项目代码?