洛谷 4287 雙倍回文

2022-05-25 19:42:10 字數 1240 閱讀 8847

記字串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

ggabaabaabaaball

輸出 #1複製

12
n \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陣列 我們發現乙...