substr=S

[ABC295F] substr = S

看到题可能想到数位 DP,但其实就是一个暴力而已。

首先区间当然用前缀和作差的形式。

枚举匹配给定串的,位置然后发现这个位置把整个数截成了三段。

考虑匹配位置和给定串之间的关系。

情况1:

image-20230629192029545

如图,匹配的数大于给定的数,此时前面可以取 \(0\sim23\),后面可以取 \(0\sim 999\),共 \(24\times 1000\)

情况2:

image-20230629192145610

此时,当前面取 \(0\sim 22\) 时后面可取 \(0\sim 999\),但是当为 \(23\) 时后面只能取 \(0\sim 678\)

情况3:

image-20230629192254704

此时,前面可以取 \(0\sim 22\),此时 \(23\) 不能取,后面可取 \(0\sim 99\)

根据上述分析思路就出来了,枚举每个位置,然后根据大小关系进行计算。复杂度极低,可以预处理数字,也可以直接每次截取三段子串,反正复杂度很低,怎么实现都飞快。

代码

posted @ 2023-06-29 19:24  wscqwq  阅读(5)  评论(0编辑  收藏  举报