这题就单独写个题解吧想了两忝了,刚刚问了一个大佬思路基本上有了
一个串$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$最长公共前缀。
这表示有$ex[i]$个串可以作为$a$串的选择
答案应该是$a$串的选择个数$*c$串的选择个数
$c$串的选择个数怎么找呢,其实他就是以$i$为开头的回文串的个数
这个下标对应的算清楚,记得用上long long 就可以过啦!耶!
搞了两天我终于写出来了!
妈呀真嘚好激动啊!!!!!