洛谷 P3804 字尾自動機

2022-06-04 13:21:08 字數 807 閱讀 1116

給定乙個只包含小寫字母的字串ss ,

請你求出 ss 的所有出現次數不為 11 的子串的出現次數乘上該子串長度的最大值。

輸入格式:

一行乙個僅包含小寫字母的字串ss

輸出格式:

乙個整數,為 所求答案

輸入樣例#1: 

abab

輸出樣例#1: 

4

對於10\%10% 的資料,|s|<=1000∣s∣<=1000

對於100\%100% 的資料,|s|<=10^6∣s∣<=106

今天上午惡補了一下字尾自動機,發現好像沒有想象中的那麼難,,,,

對於本題來說,我們只要把字尾自動機建出來,然後逆序dfs維護一下非根非葉子的right集合大小*max{}的最大值即可。

#include#define ll long long

#define maxn 4000005

#define pb push_back

using namespace std;

int root=1,tot=1,n;

char s[maxn];

int f[maxn],ch[maxn][27];

int siz[maxn],las=1,l[maxn];

int a[maxn],c[maxn];

ll ans=0;

inline void ins(int x)

}}inline void build()

inline void solve()

}int main()

洛谷P3804 模板 字尾自動機

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

洛谷P3804 模板 字尾自動機

題目大意 給乙個只包含小寫字母的字串 s 請求出 s 的所有出現次數不為 1 的子串的出現次數乘上該子串長度的最大值。題解 用字尾自動機求出每個字串的長度,排序後求出字串出現次數 字尾自動機是背板的。卡點 1.rnk 陣列沒有開兩倍 板背錯c code include include define ...

洛谷P3804 模板 字尾自動機 SAM

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