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

2022-05-20 13:13:24 字數 1287 閱讀 1559

string set queries

題意:給你3種操作,1、加入乙個串到集合中。 2、刪除集合中的某乙個串 3、查詢集合中的字串在給定的字串種出現幾次。(同乙個串可重複)

解法:建立多個ac自動機,用二進位制分組來處理。

加入給你21個串: 分為 16+4+1,再新增乙個串的時候,即21+1, 22 = 16+4+1+1 = 16 + 4 + 2。 這樣每次加串之後只會有logn個操作,查詢也變成logn操作, 對於同乙個串建立fair指標的次數就少了。

**:

1 #include2

using

namespace

std;

3#define fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);

4#define ll long long

5#define ull unsigned ll

6#define fi first

7#define se second

8#define pb push_back

9#define lson l,m,rt<<1

10#define rson m+1,r,rt<<1|1

11#define max3(a,b,c) max(a,max(b,c))

12#define min3(a,b,c) min(a,min(b,c))

13 typedef pairpll;

14const

int inf = 0x3f3f3f3f;15

const ll mod = (int)1e9+7;16

const

int n = 3e5 + 100;17

struct

node35}

36}37void add(char s, char

ch)44 mark[pos]++;

45while(si[cnt] == si[cnt-1

])49

build(root[cnt]);50}

51int query(char s, char

ch)61}62

return

ret;63}

64void unit(int u, int

v)70

}71 }ac[2

];72

char

str[n];

73int

main()83}

84return0;

85 }

ac自動機

AC自動機演算法

ac自動機簡介 首先簡要介紹一下ac自動機 aho corasickautomation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和kmp...

AC自動機演算法

ac自動機簡介 首先簡要介紹一下ac自動機 aho corasick automation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和km...

ac自動機系列

求長度不超過l的串中,包含一些單詞的串的個數 首先構造自動機,然後把每個包含了終結態的狀態都置為終結態,比如abc b,那麼ab,abc,b都是終結態,然後構造矩陣a,ax就是長度為一時得到的結果a n為長度為n結果 其中x 0,1,0 第乙個表示終結狀態,第二個表示起始狀態,最後乙個表示為長度小於...