AC自动机

#include
#include
#include
#include
using namespace std;
const int N=2*1e6+10;
int trie[N][26];//字典树 
int cntword[N];//记录单词出现的次数
int fail[N];
int cnt=0;
void insert(string s){
	int root=0;
	for(int i=0;iq;
	for(int i=0;i<26;i++){//将第二层出现的字母进栈 
		if(trie[0][i]){
			fail[trie[0][i]]=0;
			q.push(trie[0][i]);
		}
	}
	while(!q.empty()){
		int now=q.front();
		q.pop();
		for(int i=0;i<26;i++){
			if(trie[now][i]){
				fail[trie[now][i]]=trie[fail[now]][i];
				q.push(trie[now][i]);
			}
			else trie[now][i]=trie[fail[now]][i];
		}
	}
}
int query(string s){
	int now=0,ans=0;
	for(int i=0;i>n;
	string s;
	for(int i=1;i<=n;i++){
		
		cin>>s;
		insert(s);
	}
	fail[0]=0;
	getFail();
	cin>>s;
	cout<

你可能感兴趣的:(算法,c++,数据结构)