3065

思路:

  好题;

代码:

#include <queue>
#include <cstdio>
#include <cstring> using namespace std; #define maxn 50005
#define maxm 2000005 int ne[maxn][],fail[maxn],tag[maxn],n,len[],tot,ans[]; char ch[maxm],vi[][]; queue<int>que; int main()
{
int i,j,temp,now,pos;
while(scanf("%d",&n)!=EOF)
{
memset(ne,,sizeof(ne));
memset(ans,,sizeof(ans));
memset(tag,,sizeof(tag));
getchar(),tot=;
for(i=;i<=n;i++)
{
now=;
gets(vi[i]),len[i]=strlen(vi[i]);
for(j=;j<len[i];j++)
{
pos=vi[i][j]-'A';
if(!ne[now][pos]) ne[now][pos]=++tot;
now=ne[now][pos];
}
tag[now]=i;
}
que.push();
while(!que.empty())
{
now=que.front(),que.pop();
for(i=;i<;i++)
{
if(!ne[now][i]) continue;
else que.push(ne[now][i]);
if(now==) fail[ne[now][i]]=;
else
{
temp=fail[now];
while(temp)
{
if(ne[temp][i])
{
fail[ne[now][i]]=ne[temp][i];
break;
}
temp=fail[temp];
}
if(!temp) fail[ne[now][i]]=;
}
}
}
now=,gets(ch);int lit=strlen(ch);
for(i=;i<lit;i++)
{
pos=ch[i]-'A';
if(pos>=&&pos<)
{
if(ne[now][pos]) now=ne[now][pos];
else
{
temp=fail[now];
while(temp)
{
if(ne[temp][pos])
{
now=ne[temp][pos];
break;
}
temp=fail[temp];
}
if(!temp) now=;
}
}
else
{
now=;
continue;
}
temp=now;
while(temp)
{
ans[tag[temp]]++;
temp=fail[temp];
}
}
for(i=;i<=n;i++)
{
if(ans[i])
{
printf("%s: %d\n",vi[i],ans[i]);
}
}
}
return ;
}

AC日记——病毒侵袭持续中 hdu 3065的更多相关文章

  1. 病毒侵袭持续中 HDU - 3065 AC自动机

    小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒 ...

  2. 病毒侵袭持续中 - HDU 3065(AC自动机,判断子串个数)

    分析:依然是一个模板题,不过在写建立失败指针的地方竟然写错了三次....看来现在状态不太好.   代码如下: ============================================= ...

  3. AC自动机---病毒侵袭持续中

    HDU 3065 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/C Description 小t ...

  4. HDU 3065 病毒侵袭持续中(AC自己主动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...

  5. hdu 3065 病毒侵袭持续中【AC自动机】

    <题目链接> 题目大意: 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是 ...

  6. HDU 3065 病毒侵袭持续中 (AC自动机)

    题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...

  7. HDU 3065 病毒侵袭持续中

    HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. hdu 3065病毒侵袭持续中

    病毒侵袭持续中 http://acm.hdu.edu.cn/showproblem.php?pid=3065 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  9. HDU 3065 病毒侵袭持续中 (模板题)

    病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

随机推荐

  1. 修改虚拟机上Linux系统的IP地址

    然后再输入:ifconfig eth0 192.168.11.6 netmask 255.255.255.0   . 这样就可以把网卡eth0的IP地址修改为 192.168.11.6

  2. Cache的封装和使用

    ICache 接口 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  3. jQuery添加、移除、改变class属性

    jQuery中一般有3个关于改变元素class的函数addClass.removeClass.toggleClass addClass描述: 为每个匹配的元素添加指定的样式类名$('div').add ...

  4. WebService使用介绍(三)

    jax-ws开发深入 JAX-WS注解 注解说明 WebService的注解都位于javax.jws包下: @WebService-定义服务,在public class上边 targetNamespa ...

  5. oracle序列使用时 先用伪列将序列的id调整到正确的位置

  6. Div+Css制作圆

    Div+Css制作四分之一圆主要是使用Css3.0中的border-radius这个圆角隐藏属性.利用这一属性,我们可以画圆,画半圆,四分之三圆,四分之一圆等.以后我会更新…… 如何使用border- ...

  7. java高精度类尝试

    java高精度尝试, poj2109,比较坑的题目 import java.io.*; import java.util.*; import java.math.*; public class Mai ...

  8. [洛谷P3935]Calculating

    题目大意:设把$x$分解质因数的结果为$x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}$,令$f(x)=(k_1+1)(k_2+1)\cdots (k_n+1)$,求$\su ...

  9. vector创建2维数组

    以前我要建立一个二维数组,总是使用 int N=5, M=6; vector<vector<int> > Matrix(N); for(int i =0; i< Matr ...

  10. Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings

    E. The Fair Nut and Strings 题目链接:https://codeforces.com/contest/1084/problem/E 题意: 输入n,k,k代表一共有长度为n的 ...