洛谷 P3805 manacher演算法

2022-05-16 11:51:02 字數 845 閱讀 4973

思路:模板,直接上馬拉車

**:

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演算法用的還是不夠熟悉啊,被卡了好久。一會再寫個回文自動機的做法吧 清晰的回文自動機寫法 題意 若乙個回文串左半部分和有半部分分別為乙個回文串,則這個回文串被稱為雙倍回文串 這名字有點傻呀!求 給定乙個回文串,問最長的雙倍回文串有多長。思路 由於雙倍回文串是建立在回文串的基礎上的,因...