码迷,mamicode.com
首页 > 其他好文 > 详细

2018ACM-ICPC南京区域赛M---Mediocre String Problem【exKMP】【Manacher】

时间:2018-11-19 14:10:00      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:alt   bsp   题意   bubuko   技术   简单   大于   子串   段子   

技术分享图片

这题就单独写个题解吧。想了两天了,刚刚问了一个大佬思路基本上有了。

题意:

一个串$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 Problem【exKMP】【Manacher】

标签:alt   bsp   题意   bubuko   技术   简单   大于   子串   段子   

原文地址:https://www.cnblogs.com/wyboooo/p/9982651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!