zoukankan      html  css  js  c++  java
  • BZOJ 3172 单词

    fail树好厉害。

    这题还是要按bfs序来。。。。一开始直接for (int i=tot;i>=1;i--)了。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define maxn 1000050
    using namespace std;
    int n,son[maxn][27],fail[maxn],tot=0,val[maxn],sum[maxn],l[maxn],r[maxn],root,pos[250];
    char s[maxn];
    int q[maxn<<1],tail,head;
    void insert_AC(int x)
    {
        int now=root,l=strlen(s);
        for (int i=0;i<l;i++)
        {
            int nb=s[i]-'a'+1;
            if (!son[now][nb]) son[now][nb]=++tot;
            now=son[now][nb];val[now]++;
        }
        pos[x]=now;
    }
    void build_AC()
    {
        head=tail=1;q[1]=0;
        while (head<=tail)
        {
            int heads=q[head];head++;
            for (int i=1;i<=26;i++)
            {
                if (son[heads][i])
                {
                    if (!heads) fail[son[heads][i]]=0;
                    else fail[son[heads][i]]=son[fail[heads]][i];
                    q[++tail]=son[heads][i];
                }    
                else son[heads][i]=son[fail[heads]][i];
            }
        }
        for (int i=tail;i>=1;i--) val[fail[q[i]]]+=val[q[i]];
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%s",s);
            insert_AC(i);
        }
        build_AC();
        for (int i=1;i<=n;i++) printf("%d
    ",val[pos[i]]);
        return 0;
    }
  • 相关阅读:
    安卓
    查询
    数据库

    phpcms后台获取当前登录账号的数据的代码:
    phpcms后台批量上传添加图片文章方法详解(一)
    phpcms头部代码详细分析
    网站迁移的方法
    phpcms 修改域名
    外网访问我们配置好的WampServer服务器
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6374343.html
Copyright © 2011-2022 走看看