BZOJ 2565最長雙回文串 回文自動機

2021-08-21 12:54:05 字數 961 閱讀 5447

這題可以馬拉車水過。拿回文自動機來做一做也是一樣的。 li

l

i表示以第i個字元為末位置的字串字首的最大回文字尾。ri

r

i表示以第i個字元為首位置的字串字尾的最大回文字首。

那麼就正著反著各做一遍回文自動機。

注意這裡struct兩個就好了,千萬不要省空間第二遍memset用同乙個陣列,貌似我o(

n∗26)

o (n

∗26

)就tle了。還debug了許久。

另外注意

求答案就o(

n)o (n

)遍歷一遍取max。

寫回文自動機一定要注意一點!

在增量時,一定要在建完fa

il[n

ow] fai

l[no

w]

以後再把ch

[las

t][a

lp] ch[

last

][al

p]

設為no

w now

, 不然會死迴圈qwq

#include

using

namespace

std;

const

int n=1e5+10;

int ans,n,l[n],r[n];

char s[n];

struct p

inline

int get_fail(int x,int m)

inline

void insert(int alp,int m,int op)

p=ch[p][alp];

if(!op) l[m+1]=len[p];

else r[n-m]=len[p];

} }a,b;

int main()

bzoj2565 最長雙回文串

傳送門 manacher 奇怪的遞推 我也不清楚這算不算遞推 0.0 大體思路是記錄能到達每個字元的最早的對稱中心,然後根據在manacher的時候用當前回文串和前面相鄰的回文串來更新答案就好了 我邊界問題處理了好久,然而1a開森 code include define n 100005 char ...

BZOJ 2565 最長雙回文串

description 順序和逆序讀起來完全一樣的串叫做回文串。比如acbca是回文串,而abc不是 abc的順序為 abc 逆序為 cba 不相同 輸入長度為 n 的串s,求 s 的最長雙回文子串 t,即可將 t 分為兩部分x,y x y 1 且 x 和 y都是回文串。input 一行由小寫英文本...

BZOJ 2565 最長雙回文串

順序和逆序讀起來完全一樣的串叫做回文串。比如acbca是回文串,而abc不是 abc的順序為 abc 逆序為 cba 不相同 輸入長度為n的串s,求s的最長雙回文子串t,即可將t分為兩部分x,y,x y 1 且x和y都是回文串。一行由小寫英文本母組成的字串s。一行乙個整數,表示最長雙回文子串的長度。...