UVa 679 小球下落 简单模拟题,树
题目大意:给你一个完全二叉树,并且给他们编号,编号规则为左子树为2*k,右子树为2*k+1,每一个节点
上都有一个开关,初始时开关都处于关闭状态,小球碰到节点就会改变该点的开关的状态。然后给你I个小球,
要求输出第I个小球最终到达的叶子节点的编号。
思路分析:简单的模拟题,主要是要对二叉树的结构和编号原则清楚,有D层,则一共有(1<<D)-1个节点,然
后就可以开一个数组用来储存每一节点的状态,初识化为0,表示均处于关闭状态,然后就开始进行模拟,判断是否
越界通k>n?注意最后 要输出k/2;
代码:
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=20;
bool s[1<<maxn];//储存开关状态
int main()
{
int D,I;
while(~scanf("%d%d",&D,&I))
{
memset(s,0,sizeof(s));//初始化开关状态
int k,n=(1<<D)-1;
for(int i=1;i<=I;i++)//小球个数
{
k=1;
while(1)
{
s[k]=!s[k];
k=s[k]?2*k:2*k+1;//一定要先变状态
if(k>n) break;
}
}
cout<<k/2<<endl;//注意是k/2;
}
return 0;
}
读了紫书以后的优化代码,只需要判断球是第几个到该节点的,就可以知道它下一步往哪里滚。
这样做大大提高了代码效率。
代码:
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
//const int maxn=20;
//bool s[1<<maxn];//储存开关状态
int main()
{
int D,I;
while(~scanf("%d%d",&D,&I))
{
int k=1;
for(int i=1;i<=D-1;i++)//共需要判断D-1次
{
if(I%2){k=2*k;I=(I+1)/2;}
else
{
k=2*k+1;
I/=2;
}
}
cout<<k<<endl;
}
return 0;
}
UVa 679 小球下落 简单模拟题,树的更多相关文章
- UVa 679 小球下落
题意:这道题规律性极强,虽然是二叉树,但是可以用模拟来写. 1<<20 意思是1的二进制左移20位,即2的20次方. 对于二叉树中一个节点 k ,其左节点,右节点的编号分别是2k 和 2k ...
- 2019浙大校赛--A--Thanks, TuSimple!(简单模拟题)
这题前三段都是一堆吹爆赞助商的屁话,正式题目在图片下边,一个简单模拟题. 题目大意: 有n个男生,m个女生在进行舞会,其中一部分男生祥和比自己矮的女生跳舞,一部分男生想和比自己高的女生跳舞,一部分女生 ...
- POJ 1008 简单模拟题
e.... 虽然这是一道灰常简单的模拟题.但是米做的时候没有读懂第二个日历的计时方法.然后捏.敲完之后华丽的WA了进一个点.坑点就在一年的最后一天你是该输出本年的.e ...但是我好想并没有..看di ...
- HDU 4772 Zhuge Liang's Password (简单模拟题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4772 题面: Zhuge Liang's Password Time Limit: 2000/1000 ...
- UVA 1594 Ducci Sequence(紫书习题5-2 简单模拟题)
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, · · · ...
- POJ-3078.Shuffle'm Up(简单模拟题)
这道题做了有四个小时吧,今天一整天都处于边玩边学的状态,我很是不喜欢...一开始用了20分钟模拟,过了样例后TLE了,就在考虑是不是判断是否重复判定的数组开大了,结果一直蛙,后面想到了map判重,结果 ...
- HDU 5059 Help him(简单模拟题)
http://acm.hdu.edu.cn/showproblem.php?pid=5059 题目大意: 给定一个字符串,如果这个字符串是一个整数,并且这个整数在[a,b]的范围之内(包括a,b),那 ...
- HDU 1234 简单模拟题
题目很简单不多说了,我只是觉得这题目的输入方式还是很有特点的 #include <cstdio> #include <cstring> #include <algorit ...
- HihoCoder1052基因工程(简单模拟题)
描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致. 例如对于序列"ATCGAT ...
随机推荐
- lnmp源码安装以及简单配置
nginx 软件: a: openssl-1.0.1r.tar.gz tar zxf openssl-1.0.1r.tar.gz b: pcre-8.32.tar.gz tar zxf openssl ...
- BufferedInputStream
package file; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStrea ...
- Java学习笔记--NIO
参考资料:http://ifeve.com/buffers/ BIO/NIO/AIO的区别联系 http://stevex.blog.51cto.com/4300375/1284437http://w ...
- ios打包ipa的四种实用方法(.app转.ipa)-备
感谢大神分享这个博客 总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Arc ...
- 《VIM-Adventures攻略》 LEVEL 1-3
此文已转至http://cn.abnerchou.me/2014/03/04/e40e2146/ 上期有人提到此游戏烂尾.其实没有啦,作者是位"贪财"的主,不付费不给玩剩下的章节. ...
- 转发细节——forward
1)forward()方法之前的输出,如果是输出到缓冲区,再转发到其它Servlet,那么原缓冲区的数据忽略不计:2)forward()方法之前的输出,如果真正输出到浏览器,再转发到其它Servlet ...
- hdu 相遇周期
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int ...
- FJ省队集训DAY4 T2
XXX #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #i ...
- LeetCode_Minimum Window Substring
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- C#进程间通讯技术-整理。
原文:C#进程间通讯技术-整理. 扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1) ...