記字串ww的倒置為w^rwr。例如(abcd)^r=dcba(abcd)r=dcba,(abba)^r=abba(abba)r=abba。
對字串x,如果xx滿足x^r=xxr=x,則稱之為回文;例如abba是乙個回文,而abed不是。
如果x能夠寫成的ww^rww^rwwrwwr形式,則稱它是乙個「雙倍回文」。換句話說,若要xx是雙倍回文,它的長度必須是44的倍數,而且xx,xx的前半部分,xx的後半部分都要是回文。例如abbaabbaabbaabba是乙個雙倍回文,而abaabaabaaba不是,因為它的長度不是4的倍數。
xx的子串是指在xx中連續的一段字元所組成的字串。例如bebe是abedabed的子串,而acac不是。
xx的回文子串,就是指滿足回文性質的xx的子串。
xx的雙倍回文子串,就是指滿足雙倍回文性質的xx的子串。
你的任務是,對於給定的字串,計算它的最長雙倍回文子串的長度。
輸入分為兩行。
第一行為乙個整數,表示字串的長度。
第二行有個連續的小寫的英文本元,表示字串的內容。
輸出檔案只有一行,即:輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出00。
輸入 #1複製
16輸出 #1複製ggabaabaabaaball
12n \le 500000n≤500000
其實今天考試題是這個(差不多啦)
題解:emm菜雞如我,附上40分暴力**就溜。
#include#include#include
#include
#include
#include
using
namespace
std;
const
int n=500010
;int
n,p[n],ans;
intyao_chen_lai_le;
char
s[n];
bool pd(int x,int
len)
intwork()
intmain()
洛谷 P4287 雙倍回文 Manacher
manacher演算法用的還是不夠熟悉啊,被卡了好久。一會再寫個回文自動機的做法吧 清晰的回文自動機寫法 題意 若乙個回文串左半部分和有半部分分別為乙個回文串,則這個回文串被稱為雙倍回文串 這名字有點傻呀!求 給定乙個回文串,問最長的雙倍回文串有多長。思路 由於雙倍回文串是建立在回文串的基礎上的,因...
BZOJ2342 雙倍回文
目錄題目傳送門 其實是manacher的題目,但是也是可以用回文自動機做的。構建出回文自動機之後,就可以在回文數上進行dp,如果乙個點代表的回文串的長度為 的倍數,並且存在長度為它一半的字尾,就是乙個滿足答案的回文串。關鍵就在於如何判斷是否有長度為它一半的字尾。我們通過回文自動機可以構建出 fail...
SHOI2011 雙倍回文
輸入分為兩行,第一行為乙個整數,表示字串的長度,第二行有個連續的小寫的英文本元,表示字串的內容。輸出檔案只有一行,即 輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出0。16 ggabaabaabaaball 12n 500000 首先manacher求出len陣列 我們發現乙...