题面:
题意:
求区间 [ l , r ] [l,r] [l,r]中的所有数,其数位众数为 d d d,且数位众数唯一的数的个数。
题解:
先看一下官方题解:
我们顺着官方题解的思路,如果当前没有前导0且数位取值没有限制,那么就说明剩下的数位可以任意取值。
我们统计出在有限制的情况下,每个数位出现的次数 c n t [ i ] , 0 ≤ i ≤ 9 cnt[i],0\le i\le9 cnt[i],0≤i≤9,假设当前求 [ 0 , r ] [0,r] [0,r]区间,区间众数为 d d d的数的个数( 最终 a n s ( r ) − a n s ( l − 1 ) ans(r)-ans(l-1) ans(r)−ans(l−1)即可 )。
如果 l i m i t ( 数 位 限 制 ) limit( 数位限制) limit(数位限制) 或者 l e a d ( 有 前 导 0 ) lead(有前导0) lead(有前导0),那么就继续 d f s dfs dfs 下去。
如果没有数位限制,且没有前导0,设此时已经记录了 c n t [ i ] , 0 ≤ i ≤ 9 cnt[i],0\le i\le9 cnt[i],0≤i≤9,且剩下的可以任意填数位数为 l e n len len。
我们枚举 d d d 在剩下的可选任意数的位置上出现的次数,假设这个次数为 c n t d , 0 ≤ c n t d ≤ l e n cntd,0\le cntd \le len cntd,0≤cntd≤len ,那么现在 d d d 这个数位一共出现了 c n t [ d ] + c n t d cnt[d]+cntd cnt[d]+cntd 次。
我们设 d p [ i ] [ j ] dp[i][j] dp[i][j]为除了这一位 d d d 外,考虑了 0 − 9 0-9 0−9中前 i i i 个数,且一共占据了 j j