zoukankan      html  css  js  c++  java
  • hdu2896 Ac自动机

    ac自动机模版题吧
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,m,ans,id[505],vis[105000];
    char s[255],T[10005];
    struct node{
        int a[105000][128],fail[105000],danger[105000],sum,q[105000];
        void insert(int x){
            int k=0,L=strlen(s);
            for(int i=0;i<L;i++){
                int now=s[i];
                if(!a[k][now]) a[k][now]=++sum;
                k=a[k][now];
            }
            danger[k]++;
            id[x]=k;
        }
        void get_fail(){
            int head=0,tail=0;
            for(int i=0;i<128;i++){
                int now=a[0][i];
                if(now) q[tail++]=now;
            }
            while(head!=tail){
                int x=q[head++];
                for(int i=0;i<128;i++){
                    int now=a[x][i];
                    if(!now){a[x][i]=a[fail[x]][i]; continue;}
                    q[tail++]=now;
                    fail[now]=a[fail[x]][i];
                }
            }
        }
        void push_ans(int x){
            int L=strlen(T),k=0,f=0;
            memset(vis,0,sizeof(vis));
            for(int i=0;i<L;i++){
                int now=T[i];
                k=a[k][now];
                for(int j=k;j;j=fail[j]) if(danger[j]){vis[j]=1; f=1;}
            }
            if(!f) return ;
            ans++; printf("web %d:",x);
            for(int i=1;i<=n;i++) if(vis[id[i]]) printf(" %d",i); printf("
    ");
        }
    }node;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%s",s),node.insert(i);
        node.get_fail(); scanf("%d",&m);
        for(int i=1;i<=m;i++) scanf("%s",T),node.push_ans(i);
        printf("total: %d
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    关于slmgr命令
    .msi安装包安装方法(安装错误2503和2502)
    BIOS相关
    C和C#的区别
    关于del命令
    win8快捷键
    Windows 8 系统快捷键热键列表收集
    Android开发环境搭建
    关于Android sdkmanager目录结构的总结
    关于eclipse新建项目问题
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/6903374.html
Copyright © 2011-2022 走看看