数字(进制/二分/组合数学)

5 篇文章 0 订阅
3 篇文章 0 订阅
该博客探讨了一种数学问题,涉及在二进制数列中查找含有特定数量1的数字。通过分析n+1到2n的性质,提出利用二分搜索和前缀和的方法来计算f(n,k),表示n+1到2n中含k个1的数字个数。此外,还讨论了k=1和m=0的特殊情况,并利用组合数计算解决部分问题。文章重点在于二进制表示与组合计数的结合应用。
摘要由CSDN通过智能技术生成

数字

求解满足从n+1到2n中有恰好m个数字含有k个1的n,并求出个数

首先看到二进制的问题,我们需要寻找性质,首先考虑n+1和2n的性质,然后这道题中我们设f(n,k)表示n+1到2n中的数字含k个1的个数。
然后考虑f(n+1,k)=f(n,k)+[2n+1含k个1],所以我们发现这个东西是单调递增的,可以考虑二分。
又有k>1时f(n,k)<f(2n,k)因为可以构成映射,并且可以通过移动一个1到末尾增加个数。所以答案上界不会超过2e18但是需要特判k=1和m=0的情况。
然后现在问题就是如何快速求解f(n,k)然后考虑前缀和求解g(n,k)表示1到n中含k个1的数个数,然后考虑枚举和n第一个不同的位,这样枚举第一个不同的位上这个数一定是0,然后后面就可以随便选择了,就可以使用组合数计算求解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值