HDU 3068 最長回文(manacher演算法)

2021-09-08 14:24:46 字數 820 閱讀 2018

題意:求最長回文串。

思路:將串之間插入串中沒有出現過的字元,這樣不管原來的串的長度是奇數還是偶數現在都是奇數。以下我們都是針對新的串而言。設rad[i]表示以位置i為中心,半徑為rad[i]的串為回文串,即s[i-rad[i],i-1]=s[i+1,i+rad[i]]。現在我們假設已經求出了0到i位置的rad值,現在用i位置的rad值求後面的位置i+k的rad值,

//最長回文串

//串str,長度len(str[0]~str[len-1])

//回文串的起始位置start和長度sum

//rad[i]表示i位置回文串的半徑

char s[n];

void manacher(char s1,int len,int &start,int &sum,int rad)

sum=ans;

start=pos/2-ans/2;

}int main()

return 0;

}

HDU 3068 最長回文

題 目 鏈 接 看完後自己寫了一遍,感覺真的是很神奇的結論啊!本來這題看到可以用字尾陣列來寫的,但沒有學過,去看了一下,真心給暈了,決定找個機會認真研究下。我的 include include includeusing namespace std define min a,b a b a b cha...

HDU 3068 最長回文

存在o n 的演算法,學習了一下 include include includeusing namespace std const int maxn 300011 int n,p maxn char str maxn in maxn int main str 0 str 1 n n 2 2 str ...

HDU 3068 最長回文

problem description 給出乙個只由小寫英文本元a,b,c.y,z組成的字串s,求s中最長回文串的長度.回文就是正反讀都是一樣的字串,如aba,abba等 input 輸入有多組case,不超過120組,每組輸入為一行小寫英文本元a,b,c.y,z組成的字串s 兩組case之間由空行...