wenbao與ac自動機

2022-04-17 05:20:59 字數 2459 閱讀 8909

求文字串t中含有單詞的數量

存模板。。

vis陣列優化

1 #include 2 #include 

3 #include 4

using

namespace

std;56

const

int sizech = 26;7

const

int sizenode = 5e5+10;8

const

int maxn = 1000009;9

bool

vis[sizenode];

1011

struct

ac19

void insert(char *str)

28 root =ch[root][xx];29}

30 val[root]++;31}

32void

getfail()

39while(!q.empty())

48q.push(xx);

49 fail[xx] =ch[fail[c]][i];50}

51}52}

53int find(char *str)65}

66return

cnt;67}

68}ac;

69char

str[maxn];

70int

main()

81ac.getfail();

82 scanf("%s"

, str);

83 printf("

%d\n

", ac.find(str));84}

85return0;

86 }

la 4670

有n個小寫字母組成的字串和乙個文字串,求哪些字串出現的次數最多

1

//la4670 dominating patterns2//

rujia liu

3 #include 4 #include 5 #include 6 #include 7 #include

8using

namespace

std;910

const

int sigma_size = 26;11

const

int maxnode = 11000;12

const

int maxs = 150 + 10;13

14 mapms;

1516

struct

ahocorasickautomata

3031

//字元c的編號

32int idx(char

c) 35

36//

插入字串。v必須非0

37void insert(char *s, int

v) 46 u =ch[u][c];47}

48 val[u] =v;

49 ms[string(s)] =v;50}

5152

//遞迴列印以結點j結尾的所有字串

53void print(int

j) 58}59

60//

在t中找模板

61int find(char*t) 71}

7273

//計算fail函式

74void

getfail() 81}

82//

按bfs順序計算fail

83while(!q.empty()) 94}

95}9697

};98

99ahocorasickautomata ac;

100char text[1000001], p[151][80

];101

intn, t;

102103

intmain()

110ac.getfail();

111 scanf("%s"

, text);

112ac.find(text);

113int best = -1

;114

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

115if(ac.cnt[i] > best) best =ac.cnt[i];

116 printf("

%d\n

", best);

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

118if(ac.cnt[ms[string(p[i])]] == best) printf("

%s\n

", p[i]);

119}

120return0;

121 }

只有不斷學次才能進步!

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

kmp與ac自動機

xj比賽做到一道字串題,結果發現想打個字串匹配都只會n 2了,又一次忘記了kmp 想必是當初學這玩意心理陰影面積太大了。這裡再梳理一遍kmp和ac自動機 以便下次再忘了有地方看.kmp 用於處理對於字串s,想知道它在另外某個串哪些位置出現的問題,先做預處理得到乙個失配陣列,這個陣列第i位表示s的前i...

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...