思路:
首先, 由前缀和的思想, 区间$[a,b]$的计数可以化为两个计数: $[0,b]$和$[0,a-1]$的计数, 相减即可得到原来区间计数的答案.
对$[0,x]$内数位上数字的计数则可使用数位dp解决.
设$d_1(i,j,k)$为当第i位数字为j时数字k的数量, $d_2(i,j)$为第i位为$x_i$且小于$\overline{x_ix_{i-1} \cdots x_1}$(即x的前i位组成的数)时数字$j$的数量.
$d_1$的计算较为简单, 有:
较为复杂的是$d_2$的计算, 有:
答案$ans_k$为($c$为$x$的位数):
需要注意的是由于没有前导零, $d_1(i,0,k)$只在计算$d_1$时使用.
代码:
1 |
|