思路:模板,直接上馬拉車
**:
1//#include
2 #include3 #include4 #include5 #include
6 #include7 #include8 #include9 #include10 #include
11 #include12
#define inf 0x3f3f3f3f
13using
namespace
std;
14 typedef long
long
ll;15
const ll m = ll(1e7) * 3 + 5;16
string
s;17
string
s2;18
ll len[m];
19string init(string
s)20
28//
s2 += s[s.size() - 1];
29 s2 += '#'
;30//s2 += '$';
31//
s2 += '\0';
32return
s2;33
}34 ll manacher(string
s)35
50 ans =max(ans, len[i]);51}
52return ans - 1;53
}54intmain()
5562
return0;
63 }
備註:在初始化原串的時候要注意還需要再加乙個不同的字元,我這裡用的是@,防止馬拉車的時候上溢,詳情可見這篇部落格
洛谷P3805 模板 manacher演算法
給出乙個只由小寫英文本元 texttt a,texttt b,texttt c,ldots texttt y,texttt z 組成的字串 s 求 s 中最長回文串的長度 字串長度為 n 先將每兩個字母之間插入乙個奇怪的符號。記 p x 表示第 x 個字元為對稱中心,能擴充套件的最遠距離是多少。記 ...
題解 P3805 模板 manacher演算法
我們先看兩個字串 abccba abcdcba 顯然這兩字串是回文的 然而兩個串的對稱中心的特性不同,第乙個串,它的對稱中心在兩個c中間,然而第二個串,它的對稱中心就是d。這樣我們如果要記錄回文串的對稱中心,就顯得複雜了。為了解決這個問題,把兩種情況統一起來,我們就在字母之間插入隔板,這樣兩個問題就...
洛谷 P4287 雙倍回文 Manacher
manacher演算法用的還是不夠熟悉啊,被卡了好久。一會再寫個回文自動機的做法吧 清晰的回文自動機寫法 題意 若乙個回文串左半部分和有半部分分別為乙個回文串,則這個回文串被稱為雙倍回文串 這名字有點傻呀!求 給定乙個回文串,問最長的雙倍回文串有多長。思路 由於雙倍回文串是建立在回文串的基礎上的,因...