类似的题目好像KMP也做过,先做一次马拉车。记 $f _x$ 为从 $x$ 字符开始的最长的回文字符串,$g _ x$ 为从 $x$ 结束的最长的回文字符串。根据马拉车的答案,找到最长的回文字符串的开始和结尾,得到一个 $f_x$ ,再在此基础上进行递推,如 $f _ x = max(f_x, f _ {x - 1} - 2)$ ,即首尾各减少一个。最后枚举所有分割点得到答案。
查看代码
1 |
|
\begin {array}{c} \mathfrak {One Problem Is Difficult} \\\\ \mathfrak {Because You Don't Know} \\\\ \mathfrak {Why It Is Diffucult} \end {array}
类似的题目好像KMP也做过,先做一次马拉车。记 $f _x$ 为从 $x$ 字符开始的最长的回文字符串,$g _ x$ 为从 $x$ 结束的最长的回文字符串。根据马拉车的答案,找到最长的回文字符串的开始和结尾,得到一个 $f_x$ ,再在此基础上进行递推,如 $f _ x = max(f_x, f _ {x - 1} - 2)$ ,即首尾各减少一个。最后枚举所有分割点得到答案。
1 | #include <cstdio> |