1. 程式人生 > >2018ACM-ICPC南京區域賽M---Mediocre String Problem【exKMP】【Manacher】

2018ACM-ICPC南京區域賽M---Mediocre String Problem【exKMP】【Manacher】

比較 回文 題意 連續 三元 wid 第一步 com info

技術分享圖片

這題就單獨寫個題解吧。想了兩天了,剛剛問了一個大佬思路基本上有了。

題意:

一個串$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】