BZOJ 3277 串 廣義字尾自動機

2021-07-29 08:54:38 字數 688 閱讀 4024

判斷乙個串是否在至少k個字串裡面的方法後3473一樣,每新增乙個新的字元就沿fail鏈更新。

剩下的問題就只是剩下了,每增加乙個新的字元,共多出現了多少個新的字串,如果不要求重複,那麼很顯然就是len[u]-len[fail[u]],這裡重複的字串也需要加入答案所以只用沿fail鏈dfs一下,sum[u]=fail鏈上所有的壞和就好了

#include#include#include#define maxn 200021

#include#define ll long long

using namespace std;

int len[maxn],n,k,son[maxn][26],sz[maxn];

ll sum[maxn];

int fail[maxn],now,bg[maxn],bl[maxn],last=1,tot=1,rt=1;

char s[maxn];

vectorg[maxn],e[maxn];

void insert(int c)

} g[now].push_back(np);

while(np&&bl[np]!=now)

}void dfs(int u)sum[1]=0;

dfs(1);

for(int i=1;i<=n;i++){

ll ans=0;

for(int u,j=0;j

bzoj 3277 串 (廣義字尾自動機)

time limit 10 sec memory limit 128 mb submit 357 solved 144 submit status discuss 字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串 不包括空串 是所有n個字串中至少k個字串的子串 注意包括本身 第一行...

bzoj3277 串 廣義字尾自動機

廣義字尾自動機板子題 廣義字尾自動機的建圖方法大概就是在trie上按bfs序來建圖,這裡的last節點應該是trie上父親的last節點 然後這裡按題目要求記right為在至少k個串走過的方案,具體建法就是先把每個串跑一遍然後在parent樹上更新所有父親節點的答案,注意不要判重。然後掃一遍所有節點...

BZOJ3277 串 廣義字尾自動機

time limit 10 sec memory limit 128 mb submit 1196 solved 478 submit status discuss 字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串 不包括空串 是所有n個字串中 至少k個字串的子串 注意包括本身 第...