HDU 5573 Binary Tree 2015上海现场赛B题

题目大意:
有一个深度无限的完全二叉树,每个节点有一个标号:根节点标号为1,之后对于标号为x的节点,左孩子标号为2x,右孩子标号为2x+1(其实就是zkw线段树的标号规则)。现在从根节点开始向下走k步(根节点也算一步),每到一个节点可以选择加上或减去节点的标号,求最终结果为N的走法,其中N>=1且题目保证有解。

思路:
首先,我们用二进制数mask表示取数的方法,1表示+,0表示-,顺序从左向右,最右一位表示最后一次取数的方法;用pos表示最后到达节点的标号。这样就可以唯一确定一种走法,且很容易写出计算最终结果的函数f(mask,pos)。如k=3,mask=5,pos=7表示的路径为1 +,3 -,7 +,f(5,7)=5。
为方便表述再定义F(mask,x,pos,y)为mask右x位确定,pos左y位确定后,f的取值范围

经过观察很容易得到以下结论

  • 最后一个节点取法一定为+,即mask&1=1
  • 在k确定,后x步取法确定(即mask的右x位确定),前y步走法(即pos前y位确定)的情况下,f取值连续,且当所有未确定位全部置0时取得最小值

根据上述条件,只需依次确定mask和pos的值就可以得到答案

初状态mask最右位必然为1,pos最左位必然为1外其它位均未确定,根据题目限制N必包含在取值范围中,即F(1,1,1 << k,1)包含N

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值