P3804 模板 字尾自動機

2021-08-16 14:39:27 字數 600 閱讀 5155

計算出現次數》1的子串長度*次數的最大值

sam

乙個串的出現次數等於right/endpos集合的大小

而這個集合的大小等於所有parent樹上兒子的大小

這樣子的話,給每個終止位置的size記為1

然後按照拓撲序累加,這就是right/endpos集合的大小

最後對於每個size>1的節點,ans=max(longest?size)

luogu 3804

#include 

#include

#include

const

int maxm=2500000;

struct nodet[maxm];

int last=1,siz=1;

int size[maxm],c[maxm],a[maxm];

char s[maxm];

inline

void extend(int c)

}size[np]=1;

} int main()

printf("%lld\n",ans);

return

0;}

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...

P3804 模板 字尾自動機 SAM

長度為n nn的串,求乙個出現次數不小於2的子串使得子串長度乘上出現次數最大。構建s am samsa m的時候統計一下每個子串出現多少次即可。include include include using namespace std const int n 2e6 10 int n,cnt,num n...

洛谷P3804 模板 字尾自動機

題意 求字串 s 中所有出現次數不為 1 的子串的出現次數乘上該子串長度的最大值。方法 建立sam,令葉子節點 size 等於 1。按照拓撲序從下往上計數。個數大於1的就累計結果。include include include using namespace std define n 1000010...