把答案按“前导 1 的第几个位置”拆开:一个数若有 kkk 个前导 1,就会分别给前缀 1、11、……、长度为 kkk 的全 1 前缀贡献一次。
1
11
固定全 1 前缀 ppp 和总位数后,符合条件的数构成区间 [p⋅10t,(p+1)⋅10t−1][p\cdot10^t,(p+1)\cdot10^t-1][p⋅10t,(p+1)⋅10t−1],把它与 [1,N][1,N][1,N] 的交集长度加入答案即可。
全 1 前缀长度和补在其后的位数都只有 O(logN)O(\log N)O(logN) 种,因此枚举所有区间的时间复杂度为 O(log2N)O(\log^2N)O(log2N),空间复杂度为 O(1)O(1)O(1);区间端点用足够宽的整数计算可避免溢出。
注册一个 Hydro 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 Hydro 通用账户