算法竞赛入门经典 例题6-6 小球下落(python、C)
同个人网站 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的左右子结点编号分别为2k
和 2k+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)相关推荐
- 古老的密码(Ancient Cipher,UVa1339)(算法竞赛入门经典 例题4-1)C++
题目:给定两个不超过100的字符串,判断是否可以做到将其中一个字符串通过重排和映射的操作,使得两个字符串相同.例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后每个字母只要通过一次映射 ...
- 算法竞赛入门经典 例题6-2 铁轨(C、python)
同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 问题描述: 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为 1~n .你的任务 ...
- 算法竞赛入门经典 例题6-21
UVa506 System Dependencies 编写程序实现类似Linux下的软件包管理器,其工作方式为: 可以通过命令显式安装组件,这个过程也可能隐式安装依赖组件 如果没有其它组件仍然依赖一个 ...
- 算法竞赛入门经典 例题6-16
刷题荒废了一个多月,今日了却一件事情,把此题补上! UVa10129 Play on Words 有若干个圆盘,每个圆盘上都有一个单词,判断这些圆盘是否能排成一排,使得相邻圆盘的首尾字母相同. 3年前 ...
- C++ 刽子手游戏(Hangman Judge, UVa 489)(算法竞赛入门经典例题4-2)
题目:刽子手游戏是一个简单的猜单词游戏,每次可以猜一个字母,如果单词内有这个字母,此单词内所有该字母都会显示,如果没有该字母,则记一笔错误,若满7笔错误,则输掉()猜已经猜出的单词也算错误).本题编写 ...
- Java实现算法竞赛入门经典例题-蚂蚁
问题描述 一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒. 当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计). 给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂 ...
- UVA-814 邮件传输代理的交互 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 #include<iostream> #include< ...
- UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...
- UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...
最新文章
- plasma桌面设置好的面板消失了_Ubuntu Studio 将用 KDE Plasma 桌面环境替换 Xfce | Linux 中国...
- grub安装的 三种安装方式
- 反思深度思考:预热[准备] 高密度[压力专注] 辨真伪[冷静分析] 反推[灵活] 结构化[全局]
- 【RabbitMQ】5、RabbitMQ任务分发机制
- Spark提交任务参数详解
- yii 下 session 丢失的问题
- Flink CDC 系列 - 构建 MySQL 和 Postgres 上的 Streaming ETL
- 博弈论——斐波那契博弈Fibonacci Game
- 开机LOGO与动画修改
- Java软件开发流程
- tomcat是干什么的
- RK3128-android7.1-物联网模块GM196
- Kotlin与Java的异同
- java发出声音_Java播放声音的几种方式
- C语言实现植物大战僵尸----学习过程
- ubuntu使用fdisk分区
- laravel5实现第三方登录(微信)
- 华为服务器文件升级失败,升级连接服务器失败
- android内存最小版本下载,猫和老鼠精简版下载-猫和老鼠内存最小版下载v6.6.1 安卓版-芒果手游网...
- 小姐姐太强了,动图展示 10 大 Git 命令,不会都难
热门文章
- LeetCode 第 21 场双周赛(779/1913,前40.7%)
- 数据结构--队列Queue--循环顺序队列
- 在微型计算机中8m,第一部分 计算机基础知识部分习题(答案)
- ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!
- wpf计算字符大小占像素_LCD作为终端显示字符串的过程
- php请求来源,php验证请求页面来源
- 美团NLP中心算法实习生招聘
- 微软中山大学开源超强的视觉位置编码,涨点显著
- 预训练模型的前世今生(有福利!)
- 怎样高效阅读一份深度学习项目代码?