UVA.679 Dropping Balls (二叉树 思维题)

题意分析

给出深度为D的完全二叉树,按照以下规则,求第I个小球下落在那个叶子节点。

1. 默认所有节点的开关均处于关闭状态。

2. 若有小球下落在关闭状态的节点时,走向其左子树,否则走向其右子树。

3. 小球下落到某个节点,通过后开关反转。

模拟肯定不行,要根据树的特点和下落规则找简单办法。首先一个球下来,开关的状态要么是开要么是关,而且是交替进行,于是小球走的方向,是与小球是当前节点第几个球是有关系的。不难发现,对于每一个节点来说,若这个小球是其奇数个球,那么就会走向左子树,若是偶数个球,则会走向其右子树。根据这条性质,便可以直接模拟最后一个小球的走向

代码总览

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int main()
{
int kase;
while(scanf("%d",&kase) && kase !=-1){
while(kase --){
int D ,I ;
scanf("%d%d",&D,&I);
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);
}
}
return 0;
}

最新文章

  1. JS表单设置值
  2. POJ 2406 Power Strings
  3. log4j 配置实例
  4. android学习日记03--常用控件ListView
  5. BZOJ1997 [Hnoi2010]Planar (2-sat)
  6. MyBatis(4):动态SQL
  7. [置顶] android之存储篇_SQLite数据库_让你彻底学会SQLite的使用
  8. InterLockedIncrement and InterLockedDecrement函数原理
  9. IntentService和Service的区别
  10. Java基础之路(一)下--引用数据类型之数组
  11. JS中常用的几种时间格式处理-【笔记整理】
  12. 超级简单的retrofit使用自签名证书进行HTTPS请求的教程
  13. GreenDao 兼容升级,保留旧数据的---全方面解决方案
  14. [NOI2018]屠龙勇士
  15. C#获取文件版本信息
  16. nginx 长连接keeplive
  17. java 获取指定日前的前一天
  18. 18 [网络编程]-UDP
  19. c++友元函数之---一种特殊的友情
  20. PHP(四)表单的基本处理

热门文章

  1. python一标准异常总结大全(非常全)
  2. (C#)工厂方法模式
  3. 《Git学习指南》学习笔记(三)
  4. 浅谈JS-cookie,你是香甜可口的小点心吗?
  5. 【zabbix 监控】第二章 安装测试被监控主机
  6. pandas协助工具
  7. Spring MVC 整合Swagger的一些问题总结
  8. centos配置iptables
  9. mysql mariadb 密码设置
  10. 福大软工1816:Alpha(8/10)