codevs 5935 小球 x
许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节点都是FALSE,当访问到一个节点时,如果这个节点是FALSE,则这个球把它变成TRUE,然后从左子树走,继续它的旅程。如果节点是TRUE,则球也会改变它为FALSE,而接下来从右子树走。满二叉树的标记方法如下图。
因为所有的节点最初为FALSE,所以第一个球将会访问节点1,节点2和节点4,转变节点的布尔值后在在节点8停止。第二个球将会访问节点1、3、6,在节点12停止。明显地,第三个球在它停止之前,会访问节点1、2、5,在节点10停止。
现在你的任务是,给定FBT的深度D,和I,表示第I个小球下落,你可以假定I不超过给定的FBT的叶子数,写一个程序求小球停止时的叶子序号。
输入文件仅一行包含两个用空格隔开的整数D和I。其中2<=D<=20,1<=I<=524288。
对应输出第I个小球下落停止时的叶子序号。
4 2
1 2
2<=D<=20,1<=I<=524288。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath> using namespace std; void s(int d,int l)//理解题意后进行模拟
{
int max=pow(,d-);
int ans=;
while(ans<max)
{
if(l%==)//如果是奇数个
{
l=l/+;
ans*=;
}
else
{
l=l/;
ans=ans*+;
}
}printf("%d\n",ans);
} int main()
{
int d,l;
scanf("%d%d",&d,&l);
s(d,l);
return ;
}
另外一种思路:
#include<iostream>
#include<cstdio>
#define maxn 20
#include<cstring> using namespace std; bool s[<<maxn];
int main()
{
int d,I;
memset(s,,sizeof(s));
cin>>d>>I;
int k,n=(<<d)-;
for(int i=;i<=I;i++)
{
k=;
while()
{
s[k]=!s[k];
if(s[k])k=k*;
else k=k*+;
if(k>n)break;
}
}
cout<<k/;
return ;
}
codevs 5935 小球 x的更多相关文章
- codevs 1709 钉子和小球
1709 钉子和小球 1999年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果题目描述 Description有一个三角形木板 ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1052 地鼠游戏
1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
随机推荐
- BadUsb简单用法示例
所需硬件 badusb 自行淘宝 驱动程序会自动安装,若未自动安装自行百度 所需工具 arduino-1.5.5-r2用于编辑代码并上传至badusb badusb连接至电脑 打开ard ...
- Solr 4.4.0利用dataimporthandler导入postgresql数据库表
将数据库edbstore的edbtore schema下的customers表导入到solr 1. 首先查看customers表字段信息 edbstore=> \d customers Tabl ...
- Leetcode 38.报数 By Python
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ...
- mybatis 批量操作 ------持续更新
mybatis 不存在则才进行添加 # 添加的 sql 语句insert into sys_link_post_user(post_id,user_id)# 进行批量添加 (若不需要可以取消 froe ...
- Java实现龟兔赛跑
闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...
- Java 读取Json文件内容
读取json文件为String类型: import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logge ...
- Linux 中将用户添加到指定组
添加组 usermod -a -G root dev 修改组 usermod -g root dec 删除组 gpasswd -d dev root gpasswd -a dev root //将用户 ...
- form表单提交被拦截
最近做的一个项目,利用form表单(可以避免跨域问题)提交,在chrome可以正常进行跳转,但是在手机端,以及一些pc端浏览器却无法正常跳转.通过检查后台日志,没有正常跳转的都是因为后天直接没有收到该 ...
- 将数据库模型放入到.Net Core的类库中
一.前提概要 今年某天突然无聊,就决定学习.net core,此时的版本已经是.net core 1.1了.之前一直是用.net framework做项目,一直对Html.EditFor()等Html ...
- Homebrew学习(七)之你应该定期更新 Homebrew
参考 你应该定期更新 Homebrew