BZOJ2342 SHOI2011 雙倍回文

2022-04-28 22:27:19 字數 501 閱讀 3307

bzoj

首先求出以每個位置結尾的最長回文字尾長度。

然後你實際上就是要求:對於乙個長度為\(4\)的倍數的回文子串,是否存在乙個長度為他的一半的回文字尾。

這個可以沿字尾樹\(dfs\)一遍。因為乙個回文子串的所有回文字尾一定都是他在回文樹上的祖先。

#include#includeusing namespace std;

const int n = 5e5+5;

int last,tot,tr[n][26],fa[n],len[n],to[n],nxt[n],head[n],cnt,vis[n],ans;

char s[n];

void link(int u,int v)

void init()

void extend(int c,int n)

last=tr[v][c];

}void dfs(int u)

int main()

雙倍回文 Shoi2011 bzoj2342

time limit 10 sec memory limit 128 mb submit 2820 solved 1088 submit status discuss 輸入分為兩行,第一行為乙個整數,表示字串的長度,第二行有個連續的小寫的英文本元,表示字串的內容。輸出檔案只有一行,即 輸入資料中字串...

bzoj 2342 Shoi2011 雙倍回文

題目大意 演算法一 因為雙倍回文串必定是乙個回文串 所以先用manachar求出每個點能夠擴充套件出的最長的回文串長度f i 再列舉對稱軸x,對於y只要滿足y f y x y x f x 2,就可以用len x,y 4來更新答案 對於每個x,只需要用距離其最遠的滿足條件的y來更新即可 將其按i f ...

SHOI2011 bzoj2342 雙倍回文

description input 輸入分為兩行,第一行為乙個整數,表示字串的長度,第二行有個連續的小寫的英文本元,表示字串的內容。output 輸出檔案只有一行,即 輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出0。首先由題意可知,只用考慮偶數長的回文串。這樣就不用插入 直...