• p1366上字典树水过


      虽然写着AC自动机,但是我寻思着m*maxlen也能写啊为啥写的人这么少?

      对于所有的单词可以建立一个字典树,小小的改动就是把单词的结尾记录sum++,然后枚举开头能跳的话就向下跳,如果跳到一个地方发现sum!=0显然可以ans+=sum,sum=0;

      <=50*1000000AC,甚至比康神AC自动机跑的快.

      

    using namespace std;
    struct tree
    {
        int head[30],flag;
        char emm;
    }e[500010];
    int i,f,now,tot,n,len,maxlen,ans;
    char tt[60],wu[1001000];
    void add(int d,int now)
    {
        tt[d]-='a';
        if(!e[now].head[tt[d]])
            tot++,e[now].head[tt[d]]=tot;
        now=e[now].head[tt[d]];
        if(d==len-1)
        {    
                e[now].flag++;
            return ;
        }
        add(d+1,now);
        return ;
    }
    int main()
    {
        scanf("%d
    ",&n);
        for(i=1;i<=n;i++)
        {
            scanf("%s",tt);
            len=strlen(tt);
            maxlen=max(maxlen,len);
            add(0,0);
        }
        scanf("%s",wu);
        len=strlen(wu);
        for(i=0;i<len;i++)//枚举开头
        {
            for(now=0,f=i;;f++)
            {
                if(e[now].head[wu[f]-'a'])//往下跳
                    now=e[now].head[wu[f]-'a'];
                else
                    break;
                if(e[now].flag)
                    ans+=e[now].flag,e[now].flag=0;//统计答案
            }
        }
        cout<<ans;
        return 0;
    }
    23333
  • 相关阅读:
    shell脚本编程-重定向
    web安全-剖析_基础构架剖析
    shell脚本编程-函数
    shell脚本编程-循环
    web安全-入侵基础
    shell脚本编程-检查和测试
    shell脚本编程-特殊字符
    shell脚本编程-计算方式
    python例子-抓取网站IP列表
    linux问题-APR not Found
  • 原文地址:https://www.cnblogs.com/qywyt/p/10256095.html
Copyright © 2020-2023  润新知