BZOJ2565 最長雙回文串

2022-02-13 02:25:05 字數 890 閱讀 2080

傳送門

題目大意:求最長的連續的兩個回文串的長度

題解:

manacher+列舉

首先知道兩個連續回文串的中間的那個字元一定是『#』。

然後列舉『#』。看以這個字元為中心,左右最長的回文串

有多長。

now+len[now]>i時,那麼以now為中心的回文串是在i左邊

的,儘管超出了i,可以左右砍掉嘛//。i-now就是i左邊的回文

串的長度。一開始不太明白i-now為什麼是,因為還有'#'啊,寫了

幾個符號i-now就是左邊回文串的長度。

ps:如果有哪位dalao看到這篇題解,可以告訴我更好的理解方法嗎?orz

**:

#include#include

#include

#define maxn 100009

using

namespace

std;

intlen,now,ans;

char s[maxn*2],str[maxn*2

];int len[maxn*2],l[maxn*2],r[maxn*2];

void

getstr()

str[++k]='

#';len=k;}

void

manacher()

}int

main()

}now=len;

for(int i=len;i>=1;i--)

}for(int i=1;i<=len;i++)ans=max(ans,l[i]+r[i]);

cout

return0;

}

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