题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065

模板题,没什么好说的。。。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std; const int N = 2e6+; int a[];
char virus[][], MumStr[N]; struct node
{
int leaf;
node *next[],*fail;
}; void AddTrie(char s[], node *root, int num)
{
node *p = root;
for(int i=; s[i]; i++)
{
int k = s[i]-'A';
if(p->next[k]==NULL)
p->next[k] = new node();
p = p->next[k];
}
p->leaf = num;
}
void GetFail(node *root)
{
node *p, *q;
queue<node*>Q;
Q.push(root);
while(Q.size())
{
p = Q.front();
Q.pop();
for(int i=; i<; i++)
{
if(p->next[i]!=NULL)
{
q = p->fail;
while(q!=NULL)
{
if(q->next[i]!=NULL)
{
p->next[i]->fail = q->next[i];
break;
}
q = q->fail;
}
if(q == NULL)
p->next[i]->fail = root;
Q.push(p->next[i]);
}
}
}
}
void Query(node *root)
{
node *p = root, *q;
for(int i=; MumStr[i]; i++)
{
if(MumStr[i]<'A' || MumStr[i]>'Z')///如果是其他字符的话直接回到root;
{
p = root;
continue;
}
int k = MumStr[i]-'A';
while(p->next[k]==NULL && p!=root)
p = p->fail;
p = p->next[k];
if(p==NULL)
p = root;
q = p;
while(q!=root)
{
if(q->leaf)
a[q->leaf]++;
q = q->fail;
}
}
}
void FreeTrie(node *root)
{
node *p = root;
for(int i=; i<; i++)
{
if(p->next[i]!=NULL)
FreeTrie(p->next[i]);
}
free(p);
}
int main()
{
int n;
while(scanf("%d", &n)!=EOF)
{
node *root = new node();
for(int i=; i<=n; i++)
{
scanf("%s", virus[i]);
AddTrie(virus[i], root, i);
}
GetFail(root);
scanf("%s", MumStr);
memset(a, , sizeof(a));
Query(root);
for(int i=; i<=n; i++)
{
if(a[i])
printf("%s: %d\n", virus[i], a[i]);
}
FreeTrie(root);
}
return ;
}
/*
3
ABBA
BB
AB
AABBA
*/

病毒侵袭持续中---hdu3065(AC自动机模板)的更多相关文章

  1. HDU 3065 病毒侵袭持续中(AC自动机 模板)题解

    题意:给出主串中每个模式串的个数 思路:毒瘤出题人多组数据没说给的是多组数据. 板子: struct Aho{ struct state{ int next[130]; int fail, cnt; ...

  2. 【HDU3065】 病毒侵袭持续中(AC自动机)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  3. hdu3065 病毒侵袭持续中【AC自动机】

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

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

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

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

    这题数据太水,一开始没有加上Get的方法也能AC..话说AC自动机中一定要注意加上Get的方法!(不然,同一个后缀的其他单词就没被算上了.) 代码如下: #include <stdio.h> ...

  6. hdu 3065病毒侵袭持续中(ac自动机)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3065 中文题题意不解释了. 依旧稍微改一下ac自动机模版就能过了.还有一个坑点!是多组数据!!! #i ...

  7. HDU 3065 病毒侵袭持续中(AC自动机(每个模式串出现次数))

    http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:求每个模式串出现的次数. 思路: 不难,把模板修改一下即可. #include<iostrea ...

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

    题意:要你找到主串中每个模式串的个数. 思路:题目都没说是多组数据,结果没while(~)直接WA了,和上一题差不多,可以用map或者开个数组储存.指针要记得回收内存,不然MLE. #include& ...

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

    http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:中文题意. 思路:直接插入然后用一个数组记录id和cnt,因为n只有1000,可以开一个数组判断第几 ...

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

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

随机推荐

  1. FreeRTOS 二值信号量,互斥信号量,递归互斥信号量

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节讲解 FreeRTOS 任务间的同步和资源共享机制,二值信号量. 二值信号量是计数信号量的一种特殊形式 ...

  2. Dubbo源代码实现三:注册中心Registry

    我们知道,对于服务治理框架来说,服务通信(RPC)和服务管理两部分必不可少,而服务管理又分为服务注册.服务发现和服务人工介入,我们来看看Dubbo框架的结构图(来源网络): 图中可以看出,服务提供者P ...

  3. ajax——优化0126(增删改查:添加查看详情,返回结果类型为JSON型,在窗口显示)

    效果: 鼠标点击查看详情时 数据库: 0126.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  4. hive中array嵌套map以及行转列的使用

    1. 数据源信息 {"student": {"name":"king","age":11,"sex" ...

  5. Math - Uva 11300 Spreading the Wealth

    Spreading the Wealth Problem's Link ---------------------------------------------------------------- ...

  6. JavaScript实现网页安全登录(转)

    现在很多商业网站的用户登录都是明码传输的,而一般用户又习惯于所有帐号使用相同的密码来保存,甚至很多人使用的密码和自己的银行帐号都一样哦!所 以嘛还是有一定的安全隐患的,YAHOO的免费邮箱登录使用了M ...

  7. 查看sdk

  8. Tensorflow 梯度下降实例

    # coding: utf-8 # #### 假设我们要最小化函数 $y=x^2$, 选择初始点 $x_0=5$ # #### 1. 学习率为1的时候,x在5和-5之间震荡. # In[1]: imp ...

  9. 小结:单调栈 & 单调队列

    概要: 对于维护信息具有单调性的性质或者问题可以转化为具有单调性质的模型的题,我们可以考虑用单调栈或单调队列. 技巧及注意: 技巧很多,只要能将问题转化为单调性问题,就好解决了. 当维护固定长度的单调 ...

  10. pl/sql 实现归并算法 (合并插入法的优化)

    CREATE OR REPLACE PACKAGE PG_MERGESORT IS -- Author : wealth_khb@126.com -- Created : 2009-10-20 10: ...