#include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int maxn = 2*1e6+9;
int trie[maxn][26]; //字典樹
int cntword[maxn]; //記錄該單詞出現次數
int fail[maxn]; //失敗時的回溯指標
int cnt = 0;
void insertwords(string s)
}//fail[now] ->當前節點now的失敗指標指向的地方
tire[now][i] -> 下乙個字母為i+'a'的節點的下標為tire[now][i]
while(!q.empty())
else//否則就讓當前節點的這個子節點
//指向當前節點fail指標的這個子節點
trie[now][i] = trie[fail[now]][i];}}
}int query(string s)
fail[0] = 0;
getfail();
cin >> s ;
cout << query(s) << endl;
return 0;
}
AC自動機詳解
最近真是太頹了,做了一堆板子題,現在對一些知識點順便來個總結記錄 大家應該都知道kmp和trie樹吧,不懂的可以看我部落格或到網上自己動手尋找資料。ac自動機是乙個很好的東西,這是因為它的名字很好它能夠在有多個模式串的時候進行全文匹配,這十分方便地擴充套件了kmp的功能,實際上它的思路與原理與kmp...
AC自動機詳解
首先,ac自動機,不是 自動accepted機,這是乙個多模字串匹配演算法,學習這個演算法,首先要熟悉kmp演算法這個單模字串匹配演算法,然後,我們知道有個高效的多模字串匹配演算法,叫字典樹,它處理的是一些單詞在乙個句子裡出現了幾次,但假如不是在乙個句子裡,而是在乙個字串裡呢?那它就顯得很弱了,所以...
AC自動機詳解
首先,看清楚了,這是ac自動機不是自動ac機 引用ac自動機模板題上的一句話 ovo在學習ac自動機之前,應該先掌握一下兩個前置技能 ac自動機,通俗地講,就是在trie上跑kmp。ac自動機利用trie的性質和kmp的思想,可以實現字串的多模匹配。kmp是單模匹配,而它與ac自動機最大的區別就在f...