UVA 679 小球掉落 思维 + 数据结构
题目大意:
有一棵二叉树, 最大深度为D, 且所有叶子的深度都相同, 所有节点从上到下,从左到右编号依次为, 0, 1, 2, ....(2^n)-1,从节点1开始放球, 每个节点有一个开关, 开关关时向左 ,否则向右, 小球的每次撞击会使开关的状态改变。
这是一道很蠢的题, 一个简单的模拟就会输出答案:
#include <iostream> #include <cstdio> #include <string> #include <cstring> using namespace std;const int maxd = 20; int s[1 << maxd];int main() {int D, I;while( ~scanf( "%d%d", &D, &I ) ) {memset( s, 0, sizeof( s ) );int k = 0;int n = ( 1 << D ) - 1;for( int i = 0; i < I; i++ ) {k = 1;while( 1 ) {s[k] = !s[k];k = s[k] ? k * 2 : k * 2 + 1;if( k > n ) break;}}printf( "%d\n", k / 2 );}return 0; }
View Code
但是时间会超。
所以不知道哪一位大佬, 很聪明的发现:
单对于第一个小球来说, 会一直向左走( 因为初始状态下, 开关全部关闭 ), 对于第二个小球来说会落到右子树的最左节点( 因为第一个球将根节点的开关状态改变 ), 同理第三球会落到左子树的右子树的最左节点......
所以发现规律:
当最后一个球为奇数的时候会走到左子树, 这时将左子树的第一个节点当做根节点, 迭代下去直到当前的深度deep超过给定的深度D
思维题。
哪一道题都需要自己仔细的斟酌。
#include <iostream> #include <cstdio> using namespace std;int main() {int d, i;while( ~scanf( "%d%d", &d, &i) ) {int ans = 1;int deep = 1;while( deep < d ) {if( i & 1 ) {ans *= 2;i = ( i + 1 ) / 2;}else {ans = ans * 2 + 1;i /= 2;}deep++;}printf( "%d\n", ans );}return 0; }
View Code
坚持早起已经一周多了, 感觉还不错, 另外一会儿把周日那场组队赛的题单的博客写了。
多练思维 ,算法只是辅助的工具, 怒整动态规划!
转载于:https://www.cnblogs.com/FriskyPuppy/p/5997149.html
UVA 679 小球掉落 思维 + 数据结构相关推荐
- 例题6-6 小球下落(Dropping Balls, UVa 679)
例题6-6 小球下落(Dropping Balls, UVa 679) 许多的小球一个一个的从一棵满二叉树上掉下来组成一个新满二叉树,每一时间,一个正在下降的球第一个访问的是非叶子节点.然后继续下降时 ...
- android落下动画,Android应用开发android 购物车小球掉落动画
本文将带你了解Android应用开发android 购物车小球掉落动画,希望本文对大家学Android有所帮助. 先贴效果图 对自定义View小红球的绘制 public class BallView ...
- 12行代码AC——例题6-6 小球下落(Droppint Balls, UVa 679)——解题报告
励志用尽量少的代码做高效的表达. 提交(题目)链接→UVa-679 题目大意: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下,如果开关打开,则落向该节点的右子树,如果开关关闭,则 ...
- Dropping Balls UVA - 679(二叉树的遍历)
题目链接:https://vjudge.net/problem/UVA-679 题目大意:t组样例,每组包括D M 层数是D 问第M个小球落在哪个叶子节点? 每个节点有开关 刚开始全都 ...
- UVA 839 Not so Mobile 数据结构
题目链接: UVA 题目大意: 给出一颗树, 给出每个叶子的权值和力矩, 问这棵树平衡不平衡 解题思路: 由于叶子节点的输入是递归给出的, 所以编写递归进行输入比较好 代码: #include < ...
- UVa 679 - Dropping Balls
称号:有一个完整的二叉树,每个节点是一个开关,最初的全封闭,球从顶点丢弃. 每次通过开关球将将其状态反转.现在先问k球落到d当层交换机经过号. 分析:进制编码.经过模拟几次能够看出,球会让开关形成连续 ...
- 【例题 6-6 UVA - 679】Dropping Balls
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直接模拟会超时. 根据奇偶的规律.直接判断会往哪里走就好. 每个二叉树的节点.必然是左边和右边走的次数对半分.->奇数左边多一 ...
- uva 10881蚂蚁(思维题)---理清关系
题目大意:一根长度为L厘米的木棍上有n只蚂蚁每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米秒.当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置 ...
- 【Dragon of Loowater】【UVA - 11292】(思维)
题目: Once upon a time, in the Kingdom of Loowater, a mi- nor nuisance turned into a major problem. Th ...
- 算法竞赛入门竞赛 入门经典 第六章 个人记录
UVa 210 并行程序模拟(放弃 || 待补) 没看懂题意,但是有百度了一下duque 算是对duque有了一个大致的认识和了解 当然也有尝试. 本来想着去hdu找一些duque的题 结果 好像可以 ...
最新文章
- 三、索引优化(3)聚集索引上的非聚集索引
- 从一段代码的汇编看计算机的工作原理
- Centos后台运行jar
- Linux目录结构及作用
- 硬件加速会使电脑黑屏吗?
- 14/100. Merge Two Sorted Lists
- 腾讯牛逼,我酸了!!
- Windows Server 2008搭建单域环境
- 11210怎么等于24_巧算24点
- C语言中的数组(4)---二维数组的定义
- .net Response导出excel表格边框设置日期时间设置
- 【机器学习】机器学习笔记(吴恩达)
- 分享各类优秀与设计师制作公司相关的资源网站
- 微商城支付开发(二)
- Multisim基础 示波器 波形沿Y轴正方向上移一格
- Hook DirectX 在War3 魔兽争霸界面写屏
- 多表联查--01---LEFT JOIN 实现多表联查
- java读pdf一行_java 用itext解析一个pdf文件, 一行数据为一个对象,怎么解析
- Linux 安装 VSCode 桌面快捷方式创建
- 2019.9.2 《活出生命的意义》维克多·弗兰克尔