[HNOI2019]JOJO
[HNOI2019] JOJO
传送门
Solution
这题真的难(.
首先考虑没有\(2\)限制的子问题:
将原串变成\((x,c)\)二元组形成的串,考虑一个前缀和一个后缀的匹配,中间的字符都要配上,然后首尾只要求字符相同.
- 考虑如果中间有一个\((x',c)\ \ \ (x'>x)\)对\(nxt\)位置造成的影响显然是直接归\(0\),因为你无论怎样无法比这个\((x',c)\)串长.
然后直接跳\(next\)就可以了,每一次增加的是一个等差数列.
如果有了\(2\)的限制,显然是可以放到树上去做.
但由于\(kmp\)的复杂度是均摊的,所以无法保证上树的复杂度.
考虑维护\(kmp\)自动机,现在你一个字符变成了\((x,c)\),可以对于每一个\(c\)把对应\(x\)的\(kmp\)自动机建出来,维护需要跳到的\(next\)位置和增加的答案.
上述操作可以通过主席树维护.
可能我也讲的不是很清楚.