2018ACM-ICPC南京区域赛M---Mediocre String ProblemexKMPManacher
Posted wyboooo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018ACM-ICPC南京区域赛M---Mediocre String ProblemexKMPManacher相关的知识,希望对你有一定的参考价值。
这题就单独写个题解吧。想了两天了,刚刚问了一个大佬思路基本上有了。
题意:
一个串$S$,一个串$T$,在$S$中选一段子串$S[i,j]$,在$T$中选一段前缀$T[1,k]$使得$S[i,j]T[1,k]$拼起来得到的字符串是回文,并且$S$的这个串长度大于$T$的这个。问有多少这样的三元组$(i,j,k)$
思路:
首先我们可以知道我们要找的其实就是这样三个串,$a,b,c$。其中$a$和$c$合起来是$S$中连续的一段子串,$b$在$T$中且$a$和$b$是对称的,$c$一定要是一个回文,且长度至少是$1$。
第一步比较简单我们可以用manacher求出$S$中的每一个回文。
比如上面图中的下面话的是一个以$i$为中心的回文,假设他的半径是$p$。
那么$i-p$到$i-1$都是满足条件的$a$串的起始点,因为他们后面都接着一段回文。
那么我们把$S$倒过来得到$S‘$,拿$S‘$和$T$跑exkmp,就可以得到$S‘$的每一个后缀和$T$最长公共前缀。
以上是关于2018ACM-ICPC南京区域赛M---Mediocre String ProblemexKMPManacher的主要内容,如果未能解决你的问题,请参考以下文章
2018ACM-ICPC亚洲区域赛南京站I题Magic Potion(网络流)
2013 ACM-ICPC亚洲区域赛南京站C题 题解 轮廓线DP