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

2022-05-19 21:17:17 字數 704 閱讀 8720

給乙個長度為n的字串s。對於乙個字串ab,如果a和b都是回文串,那麼稱ab是乙個雙回文串。求問s最長雙回文子串的長度?

n <= 100000

正反雙向構造回文自動機,得到某乙個點為結尾和開始的最長回文串長度,記為f[i],g[i];

答案就是f[i]+g[i+1]的最大值。

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7const

int n=100500;8

int len[n],cnt[n],to[n][30

],s[n],fail[n],last,tot,n;

9int

ans,l,p1[n],p2[n];

10char

s1[n],s2[n];

11void

init()

17void add(int c,int

p)28 last=to[cur][c];

29 cnt[last]++;

30 p[n]=len[last];31}

32int

main()

43 printf("%d"

,ans);

44return0;

45 }

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。一行乙個整數,表示最長雙回文子串的長度。...