zoukankan      html  css  js  c++  java
  • BZOJ3172[Tjoi2013]单词 题解

    题目大意:

      求一些字符串在一段文章中出现的次数。

    思路:

      AC自动机的经典应用,建完自动机直接将队列里的元素调Fail指针记录即可。

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 #define M 1000009
     6 #define FC x==0?0:child[fail[x]][i]
     7 char s[M];
     8 int head,tail,cnt,q[M],sum[M],id[M],child[M][26],fail[M];
     9 
    10 void ins(int &x)
    11 {
    12     for (int i=0,j;i<strlen(s);i++,x=child[x][j],sum[x]++)
    13         if (!child[x][j=s[i]-'a']) child[x][j]=++cnt;
    14 }
    15 
    16 void build()
    17 {
    18     for (head=0,tail=1;head<tail;)
    19     {
    20         int x=q[++head],i;
    21         for (i=0;i<26;i++)
    22             if (child[x][i]) q[++tail]=child[x][i],fail[child[x][i]]=FC;
    23             else child[x][i]=FC;
    24     }
    25 }
    26 
    27 int main()
    28 {
    29     int n,i;
    30     scanf("%d",&n);
    31     for (i=1;i<=n;i++) scanf("%s",s),ins(id[i]);
    32     for (build(),i=tail;i;i--) sum[fail[q[i]]]+=sum[q[i]];
    33     for (i=1;i<=n;i++) printf("%d
    ",sum[id[i]]);
    34 }
    我一直在繁华的苍凉中徘徊着,用一颗OI的心寻找着生命和宇宙的美妙与玄奥。
  • 相关阅读:
    Groovy Urlencode编码
    PowerShell导入自定义公共函数
    Groovy获取对象类型、属性
    adb名称操作模拟器
    《坚不可摧》——乔布斯演讲
    马拉松节奏跑(转载)
    马拉松配速
    什么是思考力三要素?(转载)
    Python解析JSON为实体
    excel宏的用法
  • 原文地址:https://www.cnblogs.com/HHshy/p/5754332.html
Copyright © 2011-2022 走看看