BZOJ2565 最長雙回文串(回文樹)

2022-03-20 07:13:00 字數 649 閱讀 6558

bzoj

列舉斷點\(i\)

顯然的,我們要求的就是以\(i\)結尾的最長回文字尾的長度

再加上以\(i+1\)開頭的最長回文字首的長度

至於最長回文字首怎麼求?

把串反過來字首不就變成字尾了嗎?

所以構造兩個回文樹就好啦

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define rg register

#define max 120000

inline int read()

int n,len1[max],len2[max],ans;

char s[max];

struct palindromic_tree

t[max];

int last,tot;

void init()

void extend(int c,int n,char *s)

last=t[p].son[c];

}}t1,t2;

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