luogu3804 模板 字尾自動機

2021-08-18 11:42:36 字數 904 閱讀 2168

題目描述

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

s ,

請你求出

s 的所有出現次數不為

1 的子串的出現次數乘上該子串長度的最大值。

輸入輸出格式

輸入格式:

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

s 輸出格式:

乙個整數,為 所求答案

輸入輸出樣例

輸入樣例#1: 複製

abab

輸出樣例#1: 複製

4 說明

對於 10% 的資料,

∣s∣<=1000

對於 100% 的資料,

∣s∣<=106

拓撲排序統計出每個子串出現的個數 然後直接跑一遍統計即可

#include

#include

#include

#define n 2200000

#define ll long long

using

namespace

std;

inline

char gc()

return *s++;

}inline

void read_s(char *s)

char s[n>>1];ll ans;

int len[n],fa[n],ch[n][26];

int cnt=1,root=1,last=1,c[n>>1],size[n],rk[n];

inline

void insert1(int x)

}last=np;size[np]=1;

}int main()printf("%lld\n",ans);

return

0;}

P3804 模板 字尾自動機

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

Lougu P3804 模板 字尾自動機

給定乙個只包含小寫字母的字串ss,請你求出 ss 的所有出現次數不為 11 的子串的出現次數乘上該子串長度的最大值。輸入格式 一行乙個僅包含小寫字母的字串ss 輸出格式 乙個整數,為 所求答案 輸入樣例 1 abab 輸出樣例 1 說明對於10 10 的資料,s 1000 s 1000 對於100 ...

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