Codeforce 287 div2 C题

题目链接:http://codeforces.com/contest/507/problem/C

解题报告:现在有一个满二叉树型的迷宫,入口在根结点,出口在第n个叶节点,有一串命令,LRLRLRLRLR.....,L表示当前向左走,R表示现在向右走,然后如果碰到如果下一步的点是已经走过的,则跳过这条命令,如果下两步都是走过的话,则回到该节点的父节点。问从根结点走到出口一共到过多少个节点,包括出口节点,不包括根结点。

2e42de5cebf0bfdae7dd1e2ecf97673b77881867.png (650×500)

这是一棵满二叉树,现在假设出口的E那个点,从1出发,向左走,很显然,出口跟我现在所在的不是在同一棵子树上面,但是,可以肯定的一点是,在这种情况时,即我现在所在的子树跟出口不是在同一棵子树时,我一定会先把我当前所在的子树的所有节点都走一遍才会进入出口所在的子树上,利用这个特点,我们可以把时间复杂度简化到h,只要我每次判断当前所在的点是不是跟出口在同一课子树,如果是,继续向下走,如果不是,不用向下走了,只要加上我所在的这颗子树的节点的总个数就可以了。我一开始错在对long long 型数作位移运算时,没有对1进行强制转化声明,但是直接这样一个1放在那里默认的是int型的,所以位移运算时就会溢出,导致了我的代码在小数据时都没有问题,h达到39时,就怎么也不对了。这点要注意,以前很少对long long 型做过位移运算,这点以后要注意。

转载于:https://www.cnblogs.com/xiaxiaosheng/p/4250942.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值