AC自動機 模板 經典例題

2022-07-24 17:48:16 字數 3233 閱讀 2424

ac自動機模板

模板:

//

fail指標的含義:((最長的(當前字串的字尾))

//fail指標:i->fail==j

//word[j]是word[i]的最長字尾

1

const

int maxn=26;2

struct

trie314

15void init()//

初始化

1620

void insert(char s)//

構造樹trie

2130 end[now]++;31}

3233

void build()//

構造失敗指標

3445

while(!q.empty())

4657

58} 59}

6061

void query(char buf)//

查詢 6277}

78 printf("

%d\n

",sum);79}

80 };

【統計目標串中模式串的個數】

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

9 #include10

#define ll long long

11using

namespace

std;

12

const

int maxn=128

;//模板部分

13struct

trie

1425

26void init()//

初始化

2731

void insert(char s,int id)//

構造樹trie

3241 end[now]=id;//

記錄單詞的id42}

4344

void build()//

構造失敗指標

4556

while(!q.empty())

5768

69} 70}

7172

73bool vis[510

];74

bool query(char buf,int n,int id)//

查詢 75

91 temp =fail[temp];92}

93}94if(!flag)return

false

;95 printf("

web %d:

",id);

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

97if

(vis[i])

98 printf("%d"

,i);

99 printf("\n"

);100

return

true

;101

}102

};103

char str1[205

]; 104

char str2[10010

];105

trie ac;

106int

main()

107117

ac.build();

118int ans = 0

;119 scanf("

%d",&m);

120for(int i = 1;i <= m;i++)

121126 printf("

total: %d\n

",ans);

127}

128return0;

129 }

【思路:和病毒侵襲 hdu - 2896 這題差不多,只是多了乙個計數。】

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

9 #include10

11using

namespace

std;

12#define int long long

13const

int maxn=128;14

15char str1[1010][100

]; 16

char str2[2000005

];17

18char str[1003][66

];19

char sss[2000100

];20

struct

trie

3132

void init()//

初始化

3337

void insert(char s,int id)//

構造樹trie

3847 end[now]=id;//

記錄單詞的id48}

4950

void build()//

構造失敗指標

5162

while(!q.empty())

6374

75} 76}

7778

79int vis[1666];//

記錄出現的次數

80void query(char buf,int n)//

查詢 81

97 temp =fail[temp];98}

99}100if

(flag )

105}

106}

107return

;108

109110

}111

}ac;

112113

signed main()

123ac.build();

124 scanf("%s"

,sss);

125ac.query(sss,n);

126}

127return0;

128 }

AC自動機模板

ac自動機模板 ac自動機模板 使用方法 1 init 初始化函式 2 insert str 插入字串函式 3 build 構建ac自動機 4 query str 返回出現的字串個數 使用需注意事項 1 注意輸入的字元的範圍,需對next和其二維大小及相關引數進行更改 2 注意next fail和e...

AC自動機模板

ac自動機主要是用於多模式串的匹配問題,按照我的理解,ac自動機就是在tire樹上實現kmp演算法,由於ac自動機加入了失敗指標,所以可以把他看成乙個狀態轉移的圖。給出模板 include include include include includeusing namespace std cons...

模板 AC自動機

我覺得ac自動機的難點和核心是構建失敗指標,父親的失敗指標的兒子 son2 中有和兒子 son1 相同的,即為son1的失敗指標 例 還是有個不懂的地方 第90行,跪求大佬賜教 include include include include include include include inclu...