長度為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...