UVa 679 小球下落 (Dropping Balls)

在一颗最大深度为D的满二叉树中,小球从节点1开始落下,每次碰到开关状态反转,根据开关决定左或右路径。输入叶子深度和小球数量,求第I个小球落在哪个叶子节点。由于模拟方法会导致超时,需要找到规律。在奇数球情况下,小球落入左子树,并遵循特定位置规律。通过对规律的分析,可以确定小球的最终落点。
摘要由CSDN通过智能技术生成

有一颗二叉树,最大深度为D,且所有叶子的深度都相同,所有节点从上到下从左到右编号为,1,2,3,4 …… 2^D - 1 。在节点1处放一个小球,他会往下落。每个内节点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,走后,开关的状态都会改变,如果节点的开关关闭,就往左走,否则往右走,直到走到叶子节点。
一些小球从节点1出开始下落,最后一颗小球会落到哪里呢?输入叶子深度和小球个数I,输出第I个小球最后所在的叶子编号。假设I不超过整棵树的叶子个数,D<=20 输入最多包含1000组数据

要点:

  • 可不可以考虑用模拟做呢,显然是不行的,为什么,因为I最大可达2^20 - 1,在乘上19,则是最大走的层数,当然这仅仅只是一组数据,在1000组数据的基础上,显然会超时,因此要找规律
  • 这道题有点描述不清楚,是,小球落后,走后,那个节点的状态再改变

以下列数如果层数 = 4 个数 = 8的情况下,走的路径

  • 1 - 2 - 4 - 8
  • 1 - 3 - 6 - 12
  • 1 - 2 - 5 - 10
  • 1 - 3 - 7 - 14
  • 1 - 2 - 4 - 9
  • 1 - 3 - 6 - 13
  • 1 - 2 - 5 - 11
  • 1 - 3 - 7 - 15

相信从这里面不难看出,如果是奇数球,会掉入左子树,而在左子树中,又有 i / 2 + 1 个球&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值