UVA 679 二叉树
题目链接:https://vjudge.net/problem/UVA-679
参考自:刘汝佳的紫书
思路:
我们发现,对于每一颗子树,假如小球是第奇数次到达这颗子树的根节点时,那么此时应该向左子树走,如果是偶数次,则向右子树方向走,假如现在给出了一组输入depth,num,即深度为depth的二叉树,求第num个小球落到的位置,那么我们发现,对于每一颗子树来说,假如现在是第num次到达这颗树的根节点,如果num为奇数,那么它应该向左子树方向走,并且是第(num+1)/2次到达左子树的根节点,如果num是偶数,那么它应该要向右走,并且是第num/2次到达右子树的根节点,这样我们一直向下,按照这个思路计算就可以得出结果。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<set>
#include<cstdio>
#include<string>
#include<deque>
using namespace std;
typedef long long LL;
#define eps 1e-8
#define INF 0x3f3f3f3f
#define maxn 1005
/*struct point{
int u,w;
};
bool operator <(const point &s1,const point &s2)
{
if(s1.w!=s2.w)
return s1.w>s2.w;
else
return s1.u>s2.u;
}*/
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int n,m,k,t;
int main()
{
while(scanf("%d",&n)&&n!=-){
int depth,num;
for(int i=;i<n;i++){
scanf("%d%d",&depth,&num);
int ans=;
depth--;//先把第一层减了
while(depth){
if(num%){//奇数次到达目前子树的根节点
ans=ans*;//根节点的左子树编号是根节点编号*2
num=(num+)/;//第(num+1)/2次到达左子树的根节点
}else{
ans=ans*+;
num=num/;
}
depth--;
}
printf("%d\n",ans);
}
}
return ;
}
UVA 679 二叉树的更多相关文章
- UVA.679 Dropping Balls (二叉树 思维题)
UVA.679 Dropping Balls (二叉树 思维题) 题意分析 给出深度为D的完全二叉树,按照以下规则,求第I个小球下落在那个叶子节点. 1. 默认所有节点的开关均处于关闭状态. 2. 若 ...
- UVA 679 Dropping Balls 由小见大,分析思考 二叉树放小球,开关翻转,小球最终落下叶子编号。
A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Each ...
- UVa 679 【思维题】
UVA 679 紫书P148例题. 题目大意:小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1 ...
- Uva 679 Dropping Balls (模拟/二叉树的编号)
题意:有一颗二叉树,深度为D,所有节点从上到下从左到右编号为1,2,3.....在结点一处放一个小球,每个节点是一个开关,初始全是关闭的,小球从顶点落下,小球每次经过开关就会把它的状态置反,现在问第k ...
- UVa 679 - Dropping Balls【二叉树】【思维题】
题目链接 题目大意: 小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1变0.给定树的深度D和球 ...
- Dropping Balls UVA - 679(二叉树的遍历)
题目链接:https://vjudge.net/problem/UVA-679 题目大意:t组样例,每组包括D M 层数是D 问第M个小球落在哪个叶子节点? 每个节点有开关 刚开始全都 ...
- UVA - 679 Dropping Balls(二叉树的编号)
题意:二叉树按层次遍历从1开始标号,所有叶子结点深度相同,每个结点开关初始状态皆为关闭,小球从根结点开始下落(小球落在结点开关上会使结点开关状态改变),若结点开关关闭,则小球往左走,否则往右走,给定二 ...
- Uva 679 Dropping Ballls 二叉树的编号
这个程序常规处理起来数据量很大,I可以高达2^D-1 /* ....... */ 里面的代码块据此避免了开太大的数组 做太多的循环 #include<cstdio> #include< ...
- UVa 679 小球下落
题意:这道题规律性极强,虽然是二叉树,但是可以用模拟来写. 1<<20 意思是1的二进制左移20位,即2的20次方. 对于二叉树中一个节点 k ,其左节点,右节点的编号分别是2k 和 2k ...
随机推荐
- Linux通配符和关机命令
通配符 | # 管道符,或者(正则) > # 输出重定向 >> # 输出追加重定向 < # 输入重定向 << # 追加输入重定向 ~ # 当前用户家目录 `` ...
- ibatis.net 循环
if (oReqV[0]["tag"] != null && !string.IsNullOrEmpty(oReqV[0]["tag"].ToS ...
- SDWebImageRefreshCached
来源: http://blog.csdn.net/jiadabin/article/details/52129789 来源: http://blog.csdn.net/jiadabin/article ...
- group by 拓展
Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...
- 一、.NetCore EF 之命令行
一.前言 最近在学习研究ABP,使用到微软的ORM框架 Entity Framework(后面简称EF),将其基本操作记录下来. 二.程序包管理器控制台 为了能够在控制台中使用命令行来操作EF,需要先 ...
- majingwei 利用xml导出word文件---换行
xml不能识别<br>,需要将换行标记转换成<w:br/>
- intellij与eclipse默认快捷键对比
最近想用intellij,于是找找快捷键.用惯了eclipse,都不太适应intellij的快捷键.慢慢的就适应了常用的快捷键 Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键, ...
- 断断续续Python看到现在
没有项目的支持 承认自己实践不足 但心怀梦想 我一定可以的
- idea的maven搭建
IntelliJ IDEA中创建Web聚合项目(Maven多模块项目) 在file-setting-maven中可以配置自己下载的maven,在自己下载maven目录的config下的setting. ...
- Zabbix监控中,使用的比较好的动作信息模板
https://www.cnblogs.com/songxingzhu/p/7299377.html 故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NA ...