数字
求解满足从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,然后后面就可以随便选择了,就可以使用组合数计算求解了。