#P17285. [2024年南开中学集训]匹配
[2024年南开中学集训]匹配
题目描述
考虑有如下字符串匹配问题:
- 给定长度为 的字符串 和长度为 的字符串 ,对于每一个 ,求出最大的自然数 ,使得 且 ,将此 称为 。
其中 表示从 到 的 的子串,若 则表示空串。
考虑如下算法:
- 维护一个变量 ,初始 ;
- 依次枚举 ;
- 若 且 ,则 ,否则 ;
- 令 。
可以用如下伪代码来描述这个算法:
procedure MATCH(n, m, s, t)
i ← 1
cur ← 0
while i ≤ n do
if cur < m And s[i] = t[cur + 1] then
cur ← cur + 1
else
cur ← 0
end if
f[i] ← cur
end while
return f
end procedure
你一定会发现这个算法是错误的,例如当 , 时,正确的 数组为 ,而该算法得到的 数组为 。
请求出对于给定的 ,该算法的正确率,具体来说:
- 给定一个长度为 的字符串 和一个整数 ,若随机选取一个长度为 的字符串 (即每一位出现每种字母概率均等),按照如上错误算法算出的每个 都与正确的 一致的概率,答案对 取模。
注意: 的字符集均为 $\{\texttt{a},\texttt{b},\texttt{c},\texttt{d},\texttt{e}\}$,即给定的 只包含这些字符, 等概率取由这些字符组成的字符串。
输入格式
第一行两个整数 ,分别表示 的长度和 的长度。
第二行,一个长度为 、字符集为 $\{\texttt{a},\texttt{b},\texttt{c},\texttt{d},\texttt{e}\}$ 的字符串 。
输出格式
输出一行,一个整数,表示算法正确概率对 取模的结果。
样例输入
3 2
aba
样例输出
678806161
样例解释
当 时,正确的 和该算法得到的 不同。对于其余的 ,该算法均能得到正确的结果,所以有 种 使得该算法正确,所以输出
。
数据范围
对于 的数据满足:, 的字符集为 $\{\texttt{a},\texttt{b},\texttt{c},\texttt{d},\texttt{e}\}$。
- 对于 的数据:。
- 对于 的数据:。
- 对于另外 的数据:,且 的字符集为 (这并不代表 的字符集也是 )。