計算出現次數》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...