APIO2014 回文串 (回文自動機裸題)

2021-10-20 18:13:52 字數 1034 閱讀 1367

傳送門

沒看過題目的可以先看一下,題目要我們求的是回文串長度len*出現次數的最大值。

很符合回文自動機的性質的題目,可以用sam+manacher做,也不難,但是對回文自動機來說就是裸題。

1,本質不同回文子串長度len陣列。

2,出現次數可以用拓撲之後向前逆推求

(upd:其實並不需要拓撲,因為回文數的節點本來有有先後順序。之前做sam習慣了)

總之就是很板子

#include

using

namespace std;

#define int long long

const

int maxn =

500000

, maxk =26;

char str[ maxn +5]

;struct palindrome_automaton

void

extend

(int ch ,

int dex )

last = trans[ u ]

[ ch ]

; weight[last]++;

}void

build

(char

*str )}//

// void getweight() ///多此一舉的拓撲

//

// while (!q.empty())

//

// for (int j = 2; j <= size; ++j)

// cout << ma << endl;

// }

void

getweight()

for(

int j =

0; j <= size;

++j)

cout << ma << endl;

}}pam;

signed

main()

APIO2014 回文串 回文自動機moban

與manacher 字尾自動機倍增匹配相比快太多。manacher sam寫法 以上是回文自動機的速度 以上是manacher sam的速度。感受一下。受個人lj 的常數影響 回文自動機是乙個類字典樹,構造方式又類似於ac自動機。其每個結點就代表了乙個回文串 這與字尾自動機乙個結點代表多個字串不同 ...

省選專練之後綴自動機APIO2014回文串

本來是個回文自動機模板題 但是也可以用字尾自動機ac掉 先跑manacher 這可以識別所有的回文串 然後放進自動機裡暴力跑就是了 include include include include includeusing namespace std typedef int int define ll...

APIO 2014 序列分割

題目鏈結 演算法 首先 我們發現將一段序列切成若干段所獲得的收益與順序無關 於是我們可以用fi,j表示切i次 前j個數的最大收益 令sumi表示ai的字首和 顯然 fi,j max 斜率優化即可 此題記憶體限制較緊 可以使用滾動陣列優化空間複雜度 時間複雜度 o nk includeusing na...