纪念一下我一晚上写了八遍AC自动机
这是加强版的:
#include
#include
#include
#include
using namespace std;
int n, cnt[155], mp[155], len, maxn;
char a[155][75], b[1000005];
queue d;
struct ACzdj{
int s[10505][26], val[10505], lst[10505], fai[10505], u, v, siz;
//lst[i]是节点i沿失配指针走时遇到的第一个单词节点编号
void clr(){
siz = maxn = 0;
memset(s, 0, sizeof(s));
memset(cnt, 0, sizeof(cnt));
memset(val, 0, sizeof(val));
memset(lst, 0, sizeof(lst));
memset(fai, 0, sizeof(fai));
}
void ins(int k){
u = 0;
len = strlen(a[k]);
for(int i=0; i
这是简单版的:
#include
#include
#include
#include
using namespace std;
char a[1000005];
queue d;
int n;
struct ACzdj{
int s[1000005][26], siz, u, v, len, val[1000005], mp[1000005], fai[1000005];
int cnt[1000005], lst[1000005];
void ins(int k){
u = 0;
len = strlen(a);
for(int i=0; i>n;
for(int i=1; i<=n; i++){
scanf("%s", a);
ac.ins(i);
}
ac.getFail();
scanf("%s", a);
ac.query();
return 0;
}