luogu3808 luogu3796 AC自动机(简单版) AC自动机(加强版)

纪念一下我一晚上写了八遍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;
}

转载于:https://www.cnblogs.com/poorpool/p/7989555.html

你可能感兴趣的:(luogu3808 luogu3796 AC自动机(简单版) AC自动机(加强版))