substr=S
[ABC295F] substr = S
看到题可能想到数位 DP
,但其实就是一个暴力而已。
首先区间当然用前缀和作差的形式。
枚举匹配给定串的,位置然后发现这个位置把整个数截成了三段。
考虑匹配位置和给定串之间的关系。
情况1:
如图,匹配的数大于给定的数,此时前面可以取 \(0\sim23\),后面可以取 \(0\sim 999\),共 \(24\times 1000\)。
情况2:
此时,当前面取 \(0\sim 22\) 时后面可取 \(0\sim 999\),但是当为 \(23\) 时后面只能取 \(0\sim 678\)。
情况3:
此时,前面可以取 \(0\sim 22\),此时 \(23\) 不能取,后面可取 \(0\sim 99\)。
根据上述分析思路就出来了,枚举每个位置,然后根据大小关系进行计算。复杂度极低,可以预处理数字,也可以直接每次截取三段子串,反正复杂度很低,怎么实现都飞快。