AC自動機專題

2021-08-28 11:30:03 字數 1133 閱讀 7879

ac自動機兩大題型:查詢字串、建立有向圖dp(常數較大串數較少需要矩陣快速冪)

ac自動機學習:18.10.1

hdu2222 keywords search

給定n個單詞和1個句子,求句子中不同單詞的個數

#includeusing namespace std;

const int max=1e6+5;

struct trie

ac.build();

scanf("%d",&m);

int ans=0;

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

}printf("total: %d\n",ans);

return 0;

}

poj2778 dna sequence

給定n個病毒序列,求長度為m的健康序列的種數

ac自動機跑有向圖鄰接矩陣,求根節點可到達的非病毒終點的位置,矩陣的k次為走k步可到達的位置

e記錄病毒終點,以及f指標指向病毒終點的點(該串的子串是病毒串,例如健康串abc,病毒串bc,b->b,c->c,其中c是病毒終點)

答案為根節點所在的行值相加

#include#include#includeusing namespace std;

const int max=105;

const int mod=1e5;

int l=0;

inline int id(char c)

struct mat

};mat multi(const mat &a,const mat &b)

return b;

}int q[max],l,r;

struct trie

struct trie}}

for(int i=0;i0) pos[cnt++]=i;

for(int i=0;i=0&&j!=k)

dp[i|ac.e[pos[k]]][k]=min(dp[i|ac.e[pos[k]]][k],dp[i][j]+g[j][k]);

int ans=inf;

for(int i=0;iprintf("%d\n",ans);

}return 0;

}

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

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

AC自動機及字尾自動機

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

AC自動機演算法

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