BZOJ 2565 最長雙回文串(回文樹)

2021-08-21 18:28:34 字數 778 閱讀 6811

看懂題意,看懂題意,看懂題意

開始沒看懂題意,wa到崩潰

題目給乙個字串s,要你求最長的t

t:s的子串,並且t是兩個回文串的拼接

bzoj上樣例的解釋:

s=baacaabbacabb

從s的第二個字元開始到s的最後乙個字元結束的子串 t=aacaabbacabb

t可分為aacaa與bbacabb兩部分,且兩者都是回文串,並且這也是滿足條件的最長的t。

我是為了學習回文樹來寫這個題的

回文樹,看了很多部落格,都不是很懂,最後還是自己看模板的**,進行分析,才對回文樹有了初步的認識

**:

#include#include#includeusing namespace std;

#define max(a,b) a>b?a:b

const int maxn=100000+100;

int tree[maxn][26],len[maxn],fail[maxn],tot,suff;

int maxlen[maxn][2];

char ch[maxn];

inline void insert(int pos)

if(tree[cur][ind])

tree[cur][ind]=++tot;

len[tot]=len[cur]+2;

suff=tot;

if(cur==0)

while(true) }}

void init()

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