题目链接: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. 实现在edittext中任意插入图片

    Myedittext: public class MyEditText extends EditText { public MyEditText(Context context) { super(co ...

  2. cocos2d-x中CCEditbox导出到lua

    自从工作后感觉时间较少(每天工作9-22,晚上就不想动了,早上想多睡点),工作中用的是 cocos2d-x.cocos2d-x是一款手机游戏引擎,虽然支持lua,但和love2d相比非纯lua游戏引 ...

  3. [vundle]利用vundle工具来管理vim插件

    转自:http://os.51cto.com/art/201507/484174.htm Vim是Linux上一款用途广泛的轻量级文本编辑工具.虽然对普通的Linux用户来说开始学用起来难度相当大,但 ...

  4. Qt下QTableWidget的使用

    1.QTableWidget的基本设置 ui->tableWidget->setColumnCount(11); ui->tableWidget->setRowCount(Nu ...

  5. php -- each()、list()

    1.each的用法 先看API:array each ( array &$array ) api里是这么描述的:each — 返回数组中当前的键/值对并将数组指针向前移动一步 我们先来看看返回 ...

  6. 关于 Apache 的 25 个初中级面试题

    关于 Apache 的 25 个初中级面试题 出自:http://blog.jobbole.com/60471/

  7. maven环境的配置

    http://maven.oschina.net/help.html     --配置说明 http://maven.oschina.net/index.html#nexus-search;quick ...

  8. Windows网络接口API函数

    Windows提供了一套非常轻量级的网络函数,方便进行网络应用开发,整理出来供参考使用. The following functions are used in Windows networking: ...

  9. Redis异构集群数据在线迁移工具Redis-Migrate-Tool【转】

    摘要:Redis-Migrate-Tool(后面都简称RMT),是唯品会开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业 ...

  10. JSP状态管理 及 Cookie实例

    HTTP协议的无状态性 无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端的请求. 但是当同一个浏览器再次发送请求给了服务器的时候,服务器并不知道它就是刚才那个浏览器. 简单地说,就是服务器 ...