本题是一个二叉树问题——Perfect Binary Tree。

一个完美二叉树(PBT)的深度为D,从根结点开始,按层次遍历顺序编号为1,2,...,2D-1。

有若干个球,依次由根结点落下。当一个球落在非叶结点上时,将向左子树或右子树落下。这个方向由每一个结点的flag控制(其中,flag是一个0-1型变量):

①当flag==0时,小球向左子树运动;

②当flag==1时,小球向右子树运动。flag初始化为0。

一个小球路过该结点后,该结点的flag值变化。

求解第I个球最终到达的叶结点。

可以考虑模拟。直接模拟的时间复杂度为O(ID),空间复杂度为O(2D),多组数据下TLE。

值得注意的是,在题中的编号方式中,若一个结点的编号为k,则其左子结点的编号为2*k,右子结点的编号为2*k+1。

于是,可以考虑某一个结点k的情况:若某一个小球是第i个路过结点k的小球,则:

①当i为奇数时,小球向左,下一个结点为2*k:此时,该小球是向左的第(i+1)/2个小球;

②当i为偶数时,小球向右,下一个结点为2*k+1:此时,该小球是向右的第i/2个小球。

于是,可以直接模拟第I个球的路线。时间复杂度为O(D),空间复杂度为O(1)。

参考程序如下:

#include <stdio.h>

int main(void)
{
int n, d, i;
scanf("%d", &n);
while (n--) {
scanf("%d%d", &d, &i);
int k = ;
d--;
while (d--) {
if (i & ) {
k = k << ;
i = i + >> ;
} else {
k = k << | ;
i = i >> ;
}
}
printf("%d\n", k);
}
return ;
}

UVa OJ 679 - Dropping Balls的更多相关文章

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

    UVA.679 Dropping Balls (二叉树 思维题) 题意分析 给出深度为D的完全二叉树,按照以下规则,求第I个小球下落在那个叶子节点. 1. 默认所有节点的开关均处于关闭状态. 2. 若 ...

  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 ...

  3. UVa 679 Dropping Balls (例题 6-6)

    传送门:https://uva.onlinejudge.org/external/6/p679.pdf 题意:在一颗结点带开关的完全二叉树上扔球,初始时开关为关闭状态,树的深度为D(1 <= D ...

  4. Uva 679 Dropping Balls

    这道题如果模拟着来写,思路很简单 #include <iostream> #include <cstring> using namespace std; int T,D,I,c ...

  5. Uva 679 Dropping Balls (模拟/二叉树的编号)

    题意:有一颗二叉树,深度为D,所有节点从上到下从左到右编号为1,2,3.....在结点一处放一个小球,每个节点是一个开关,初始全是关闭的,小球从顶点落下,小球每次经过开关就会把它的状态置反,现在问第k ...

  6. UVa 679 - Dropping Balls【二叉树】【思维题】

    题目链接 题目大意: 小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1变0.给定树的深度D和球 ...

  7. UVA - 679 Dropping Balls(二叉树的编号)

    题意:二叉树按层次遍历从1开始标号,所有叶子结点深度相同,每个结点开关初始状态皆为关闭,小球从根结点开始下落(小球落在结点开关上会使结点开关状态改变),若结点开关关闭,则小球往左走,否则往右走,给定二 ...

  8. Dropping Balls (二叉树+思维)

      Dropping Balls  A number of K balls are dropped one by one from the root of a fully binary tree st ...

  9. Dropping Balls UVA - 679

      A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Eac ...

随机推荐

  1. 【面试】【Spring常见问题总结】【07】

    [常见面试问题总结文件夹>>>] 61.Spring IoC容器的依赖有两层含义: Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean并管理Bean的 ...

  2. Buy or Build (poj 2784 最小生成树)

    Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1348   Accepted: 533 Descr ...

  3. cocos2dx编译安卓版本号查看C++错误

    首先,在Mac以下相关软件路径,打开"终端",然后输入  pico .bash_profile  回车 export COCOS2DX_ROOT=/Users/bpmacmini0 ...

  4. Java系列之JNDI

      简单介绍   JNDI(Java Naming and Directory Interface,Java命名和文件夹接口)是SUN公司提供的一种标准的Java命名系统接口.JNDI提供统一的cli ...

  5. hdu3592 World Exhibition --- 差分约束

    这题建图没什么特别 x个条件:Sb-Sa<=c y个条件:Sa-Sb<=-c 题目问的是.1和n之间的关系. 有负环的话,整个就不可能成立,输出-1 假设图是连通的(1到n是连通的),就输 ...

  6. SVM中的线性分类器

    线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线)     假如说, ...

  7. 杂项-Java:标签库

    ylbtech-杂项-Java:标签库 1.返回顶部 1. JSP标签库,也称自定义标签库,可看成是一种通过JavaBean生成基于XML的脚本的方法.从概念上讲,标签就是很简单而且可重用的代码结构. ...

  8. Power Network(最大流(EK算法))

    http://poj.org/problem?id=1459 题意:有一个电路网络,每个节点可以产生.传递.消耗若干电量,有点线连接结点,每个电线有最大传输量,求这个网络的最大消费量. 思路:从源点到 ...

  9. springboot配置过滤器和拦截器

    import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...

  10. 【原创分析帖】据说Google内部有史以来最难的一道面试题

    逛技术平台的时候,刷到一道算法题,一眼看去,就被其开头吸引了: 摘自知乎某 Google 分布式大神的一道题,技术是Google内部出的有史以来最难的一道题 嗯,距离下班还有一段时间,就看看把. 题目 ...