P3804 模板 字尾自動機 SAM

2021-10-02 09:10:40 字數 614 閱讀 6085

長度為n

nn的串,求乙個出現次數不小於2的子串使得子串長度乘上出現次數最大。

構建s am

samsa

m的時候統計一下每個子串出現多少次即可。

#include

#include

#include

using

namespace std;

const

int n=

2e6+10;

int n,cnt,num[n]

,len[n]

,fail[n]

,next[n][26

],ans;

char s[n]

;void

new_point

(int x,

int y)

void

make_sam

(char

*s)break;}

if(!y)fail[last]=1

;for

(y=last;y;y=fail[y]

) num[y]++;

}return;}

intmain()

洛谷P3804 模板 字尾自動機 SAM

給定乙個只包含小寫字母的字串 s 請你求出 s 的所有出現次數不為 1 的子串的出現次數乘上該子串長度的最大值。s leq 10 6 mathrm t cdots s x t 對於 mathrm t 相同的所有子串 t 我們把他們歸到乙個等價類中,然後對於每乙個等價類建立乙個節點。如果 mathrm...

P3804 模板 字尾自動機

計算出現次數 1的子串長度 次數的最大值 sam 乙個串的出現次數等於right endpos集合的大小 而這個集合的大小等於所有parent樹上兒子的大小 這樣子的話,給每個終止位置的size記為1 然後按照拓撲序累加,這就是right endpos集合的大小 最後對於每個size 1的節點,an...

P3804 模板 字尾自動機

給出乙個字串,求出所有出現次數不為1的子串,長度 出現次數的最大值 1 leq s leq 1000 000 用sam求出所有子串出現的次數即可 includeusing namespace std const int n 2 1e6 10 typedef long long ll char s n...