例题6-6 小球下落(Dropping Balls, UVa 679)
例题6-6 小球下落(Dropping Balls, UVa 679)
许多的小球一个一个的从一棵满二叉树上掉下来组成一个新满二叉树,每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。
决定球运动方向的是每个节点的布尔值。最初,所有的节点都是 FALSE,当访问到一个节点时,如果这个节点是 FALSE,则这个球把它变成 TRUE,然后从左子树走,继续它的旅程。如果节点是TRUE,则球也会改变它为 FALSE,而接下来从右子树走。满二叉树的标记方法如下图。
因为所有的节点最初为 FALSE,所以第一个球将会访问节点 1,节点 2 和节点 4,转变节点的布尔值后在在节点 8 停止。第二个球将会访问节点 1、3、6,在节点 12 停止。明显地,第三个球在它停止之前,会访问节点 1、2、5,在节点 10 停止。
现在你的任务是,给定新满二叉树的深度 d 和下落的小球的编号 i ,可以假定I不超过给定的新满二叉树的叶子数,写一个程序求小球停止时的叶子序号p。
- 直接暴力模拟,耗费内存
- 优化:
直接利用二叉树特殊的性质:
父节点编号为 k
左子节点编号为 2k
右子节点编号为 2k+1
#include<iostream>
#include<cstdio>
using namespace std;int main(){int D, I, kase;cin >> kase;while(kase--){cin >> D >> I;int k = 1; // 用于记录当前节点的编号for(int i = 0; i < D-1; i++) { // 树的深度从零开始算 (叶节点位置由 D-1 曾即可推出)if(I & 1) { k = 2 * k; I = (I+1)/2; } // 每深入一层, 当前节点的编号k * 2; // 每深入一层,到达该节点的球数减少为其父节点处的一半(分奇偶),该球是最后一个到达的球,用I 记录这是第几个到达的球else { k = 2*k + 1; I = I/2; }}cout << k << endl;}cin >> kase;// 输入格式要求return 0;
}
例题6-6 小球下落(Dropping Balls, UVa 679)相关推荐
- 12行代码AC——例题6-6 小球下落(Droppint Balls, UVa 679)——解题报告
励志用尽量少的代码做高效的表达. 提交(题目)链接→UVa-679 题目大意: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下,如果开关打开,则落向该节点的右子树,如果开关关闭,则 ...
- UVA679 小球下落 Dropping Balls(二叉树的编号)
许多的小球一个一个的从一棵满二叉树上掉下来组成一个新满二叉树,每一时间,一个正在下降的球第一个访问的是非叶子节点.然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点. 决定球运动方向的是每 ...
- Dropping Balls UVA - 679(二叉树的遍历)
题目链接:https://vjudge.net/problem/UVA-679 题目大意:t组样例,每组包括D M 层数是D 问第M个小球落在哪个叶子节点? 每个节点有开关 刚开始全都 ...
- 679 - Dropping Balls
Dropping Balls PS:因为该题排版较麻烦,这里给出OJ网址:UVa679 - Dropping Balls 有一棵二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从上到下从左到右编 ...
- 二叉树小球下落问题c语言,#C++初学记录(树和二叉树)
二叉树的编号 例题 6-6 小球下落问题 有一棵二叉树,最大深度为D,且所有叶子深度都相同.所有节点从上到下,从左到右编号为1,2,3,4,....,2^D-1.在节点1处放置小球,他会往下落.每个节 ...
- python小球方案问题_Python解决抛小球问题 求小球下落经历的距离之和示例
本文实例讲述了Python解决抛小球问题 求小球下落经历的距离之和.分享给大家供大家参考,具体如下: 问题: 小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他 ...
- python中小球落地问题_Python解决抛小球问题 求小球下落经历的距离之和示例
本文实例讲述了Python解决抛小球问题 求小球下落经历的距离之和.分享给大家供大家参考,具体如下: 问题: 小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他 ...
- Java_小球自由落体_小球下落问题
小球下落问题描述: 一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 问题的关键有: 1.要求得第十次落地时,球走的总路程,即包 ...
- (完全二叉树编号)小球下落
题目 有一棵二叉树,最大深度为D,且所有的叶子深度都相同.所有结点从上到下从左到右编号为1,2,3,-,2eD-1.在结点1处放一个小球,它会往下落.每个结点上都有一个开关,初始全部关闭,当每次有小球 ...
最新文章
- python 获取当前时间 时间差
- 远控免杀专题(29)-C#加载shellcode免杀-5种方式(VT免杀率8-70)
- 189A. Cut Ribbon
- 英语口语Week16 Wednesday
- HTML5——section,article,aside
- python面试题(5)--- 检测 字符串 是否可以转换成 数字
- 喜庆红色C4D立体电商首焦模板|PSD分层格式,设计师大呼真香!
- Linux最常用的基础命令 下篇
- shell 脚本批量安装perl包
- 网站的前期策划准备工作
- Python中的抽象超类
- IDEA中用maven打出的jar包只有一个META-INF文件夹,没有java的源码???
- 为Windows 7 Professional安装多语言包
- 倾力打造在线SAP学习练习测试系统,能上网就可以使用SAP
- js2D物理引擎插件
- CodeBlock 常用快捷键
- java获取上周和上上周的开始时间和结束时间
- python算闰年和平年的天数_如何判断闰年和平年的方法有哪些-百度经验
- 阿里妈妈Dolphin分布式向量召回技术详解
- 内核驱动 (二)Linux按键驱动分析