BZOJ3277 串 廣義字尾自動機

2022-08-14 01:42:16 字數 1174 閱讀 2286

time limit: 10 sec  memory limit: 128 mb

submit: 811  solved: 329

[submit][status][discuss]

字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串(不包括空串)是所有n個字串中

至少k個字串的子串(注意包括本身)。

第一行兩個整數n,k。

接下來n行每行乙個字串。

n,k,l<=100000

輸出一行n個整數,第i個整數表示第i個字串的答案。

3 1abcaab

6 1 3

1 #include2 #include3 #include4 #include5 #include6 #include7

#define maxn 200005

8using

namespace

std;

9int

n,k;

10long

long

c[maxn];

11long

long

ans[maxn];

12struct

data

15void extend(int x,int

id) 29}

30for(int i=np;i&&tp[i]!=id;i=link[i]) size[i]++,tp[i]=id;31}

32}sam;

33int

head[maxn],sum;

34struct

edge e[maxn];

37void add(int u,int v)

38char

s[maxn];

39void dfs(int

x) 43

intmain()

51for(int i=2;i<=sam.cnt;i++)

55 dfs(1

);56

for(int i=1;i<=n;i++) printf("

%lld

",ans[i]);57}

58/*

593 2

60abaac

61bba

62bbacb

63*/

view code

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

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

BZOJ 3277 串 廣義字尾自動機

判斷乙個串是否在至少k個字串裡面的方法後3473一樣,每新增乙個新的字元就沿fail鏈更新。剩下的問題就只是剩下了,每增加乙個新的字元,共多出現了多少個新的字串,如果不要求重複,那麼很顯然就是len u len fail u 這裡重複的字串也需要加入答案所以只用沿fail鏈dfs一下,sum u f...

bzoj3277 串 廣義字尾自動機

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