题目链接

题目大意:

小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0。若小球落到节点为0的则往左落,否则向右落。并且小球会改变它经过的节点,0变1,1变0。给定树的深度D和球的个数I,问第I个小球会最终落到哪个叶子节点。

解题思路:

完全二叉树有一个重要的性质:对于任意一个节点k,其左节点、右节点的编号分别为2k和2k+1

对于根节点,很容易知道当球的编号为奇数时,球落入左子树,偶数时落在右子树。这样其实对于其它节点看成根节点时也是一样的。比如对于第7个球,为奇数,是第7个到达一号节点的球,也是第(7/2)+1=4个到达2号节点球,再往下也是第2个到达5号节点的球。。。。

所以可以直接通过找规律,模拟最后一个球的判断过程

这是我的AC代码

#include <cstdio>
typedef long long ll;
ll d, n; int main()
{
int cur;
while (scanf("%d", &cur) != EOF,cur!=-)
{
while (cur--)
{
scanf("%lld%lld", &d, &n);
int height = ;
ll num = ;
while (height < d) //从深度为1的根节点到达深度为d的叶子总共需要判断d-1次
{
if (n % == ) //当球的编号为偶数的时候
{
num = num * + ;
n = n / ;
height++;
}
else //当球的编号为奇数的时候
{
num = num * ;
n = (n + ) / ;
height++;
}
}
printf("%lld\n", num);
}
}
return ;
}

以下更为精简的代码,和两种思路

数学思路

#include<stdio.h>

int main()
{
int D, I,cas;
while (scanf("%d", &cas) != EOF,cas!=-1)
{
while (cas--)
{
scanf("%d%d", &D, &I);
int k = ;
for (int i = ; i < D - ; i++)
{
if (I % ) //奇数
{
k = * k;
I = (I + ) / ;
}
else {
k = * k + ;
I = I / ;
}
}
printf("%d\n", k);
}
}
return ;
}

模拟下落过程

#include<stdio.h>
#include<string.h>
const int MAXD = ;
int s[<<MAXD]; //最大节点个数 2^MAXD - 1 int main()
{
int D, I,cas;
while (scanf("%d", &cas) != EOF,cas!=-1)
{
while (cas--)
{
scanf("%d%d", &D, &I);
memset(s, , sizeof(s)); //开关初始全0,表示关闭
int k, n = ( << D) - ; //k表示下落到的节点的开关下标
for (int i = ; i < I; i++) //共下落I个小球
{
k = ;
while ()
{
s[k] = !s[k];
k = s[k] ? * k : * k + ; //根据开关选择左右子树
if (k > n) break; //落到树外,出界
}
}
printf("%d\n", k / ); //出界前叶子节点编号
}
}
return ;
}

2018-03-31

UVa 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 (模拟/二叉树的编号)

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

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

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

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

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

  6. Uva 679 Dropping Balls

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

  7. Uva 679 Dropping Ballls 二叉树的编号

    这个程序常规处理起来数据量很大,I可以高达2^D-1 /* ....... */ 里面的代码块据此避免了开太大的数组 做太多的循环 #include<cstdio> #include< ...

  8. UVA.699 The Falling Leaves (二叉树 思维题)

    UVA.699 The Falling Leaves (二叉树 思维题) 题意分析 理解题意花了好半天,其实就是求建完树后再一条竖线上的所有节点的权值之和,如果按照普通的建树然后在计算的方法,是不方便 ...

  9. UVA.10881 Piotr's Ants (思维题)

    UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...

随机推荐

  1. Confluence 6 用户目录图例 - 只读连接 LDAP 整合本地用户组

    上面的图:Confluence  连接到一 LDAP 目录,权限对本地用户组设置为只读. https://www.cwiki.us/display/CONFLUENCEWIKI/Diagrams+of ...

  2. Django框架之第三篇模板语法(重要!!!)

    一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...

  3. dubbo源码之服务消费

    消费端启动初始化过程: 消费端的代码解析也是从配置文件解析开始的,服务发布对应的<dubbo:service,解析xml的时候解析了一个ServiceBean,并且调用ServiceConfig ...

  4. 支付宝WAP支付总结

    一:支付宝开放文档: 支付宝手机网站支付的开发文档: https://docs.open.alipay.com/203 二:配置应用环境: 开发者调用接口前需要先生成RSA2密钥,RSA2密钥包含应用 ...

  5. idea首次创建新模块的详细操作

    依赖网址:https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.1.0 https://mvnrepository. ...

  6. 解决Django + DRF:403 FORBIDDEN:CSRF令牌丢失或不正确,{"detail":"CSRF Failed: CSRF cookie not set."}

    我有一个Android客户端应用程序尝试使用Django + DRF后端进行身份验证.但是,当我尝试登录时,我收到以下响应: 403: CSRF Failed: CSRF token missing ...

  7. Navicat Premium 12.1.8.0安装与激活

    本文介绍Navicat Premium 12.1.8.0的安装.激活与基本使用. 博主所提供的激活文件理论支持Navicat Premium 12.0.x系列和Navicat Premium 12.1 ...

  8. Top 查看某些或者某个进程(top -p pid)

    https://blog.csdn.net/zhangfn2011/article/details/7488746?utm_source=blogxgwz5

  9. PHP微信模板消息发送

    <?php class Wxtemplate extends Base { function __construct() { $this->appid = config('WXAPP_AP ...

  10. .net core支持的操作系统版本

    https://github.com/dotnet/core/blob/master/os-lifecycle-policy.md