zoukankan      html  css  js  c++  java
  • Luogu3796 【模板】AC自动机(加强版)

    https://www.luogu.org/problemnew/show/P3796

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+4;
    int tot=0,sum[maxn];
    struct node{
        int fail,next[26],tag,end;
    }z[maxn];
    inline void insert(char *s,int m){
        int len=strlen(s);
        int now=0;
        for(int i=0;i<len;i++){
            int v=s[i]-'a';
            if(!z[now].next[v]) z[now].next[v]=++tot;
            now=z[now].next[v];
        }
        //z[now].tag++;
        z[now].end=m;
    }
    inline void build_AC(){
        queue<int>q;
        for(int i=0;i<26;i++) {
            z[z[0].next[i]].fail=0;
            if(z[0].next[i]) q.push(z[0].next[i]);
        }
        while(!q.empty()){
            int now=q.front();q.pop();
            for(int i=0;i<26;i++){
                if(z[now].next[i]){
                    z[z[now].next[i]].fail=z[z[now].fail].next[i];
                    q.push(z[now].next[i]);
                }else{
                    z[now].next[i]=z[z[now].fail].next[i];
                }
            }
        }
    }
    inline void AC_query(char *s){
        int len=strlen(s);
        int now=0;
        for(int i=0;i<len;i++){
            now=z[now].next[s[i]-'a'];
            int t=now;
            while(t){
                sum[z[t].end]++;
                t=z[t].fail;
            }
        }
    }
    char s[maxn];
    char st[154][74];
    int main(){
        int n;
        while(cin>>n){
            tot=0;
            memset(z,0,sizeof(z));
            memset(sum,0,sizeof(sum));
            if(n==0) return 0;
            for(int i=1;i<=n;i++){
                scanf("%s",st[i]);
                insert(st[i],i);
            }
            build_AC();
            scanf("%s",s);
            AC_query(s);
            int ans=0;
            for(int i=1;i<=n;i++) ans=max(ans,sum[i]);
            printf("%d
    ",ans);
            for(int i=1;i<=n;i++){
                if(sum[i]==ans) printf("%s
    ",st[i]);
            }
        }
    }
  • 相关阅读:
    敏捷 咨询师 火星人陈勇博客牛人
    fpa 功能点分析法
    cto职责
    lexus
    c
    zz
    百度效率云
    zz
    产品研发体系中的需求承接与输出
    ESAPI学习笔记
  • 原文地址:https://www.cnblogs.com/wifimonster/p/10480901.html
Copyright © 2011-2022 走看看