AOJ 2539 Counting 1's


Aizu 2539

题意:询问是否存在区间[A,B],使得[A,B]之间,从后往前二进制第i位为1的数个数为k[i]。(1<=A,B<=1e18)

要求判断无解,多解或者确定唯一解。


非常有趣的思想题,我们设区间大小W=B-A+1,注意到k[0],也就是最后一位二进制可以将W的范围约束住。

一共有三种情况:

W=2*k[0]-1

W=2*k[0]

W=2*k[0]+1

所以我们分别对三种W进行判断即可。

如何计算:从最高位开始往低位走,显然对于确定的W,k[i]有四种可能性:

k[i]=0

k[i]=W

0<k[i]<W

k[i]>W

第一种情况,在[A,B]之间没有任何数第i位为1,所以显然A,B在这一位上都是0。

第二种情况,所有[A,B]之间的数都是1,所以A,B在这一位上都是1。

第三种情况,表示了A在这一位上是0,而B在这一位上是1。

第四种情况,情况不合法。


现在我们单独讨论第三种情况:

假设当前

A=0b000101

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值