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

输入的字符是所有可见的ASCII码(共有127个)所以要注意一下;

把结果存到一个数组中,然后输出;

ac自动机详解:http://www.cnblogs.com/zhengguiping--9876/p/4854752.html

要用c++交,G++会MLE的;

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std; const int N = 1e4+;
int vis[N], a[N], cnt;
char s[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 = (int)s[i];
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(char s[], node *root)
{
node *p = root, *q;
for(int i=; s[i]; i++)
{
int k = (int)s[i]; while(p->next[k] == NULL && p!=root)///如果匹配不成功,那么就走失败路径,沿着fail指针走,一直到找到或者跟结点为止;
p = p->fail;
p = p->next[k];
if(p==NULL)
p = root;
q = p;
while(q!=root)
{
if(q->leaf && !vis[q->leaf])
{
a[cnt++] = q->leaf;
vis[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, m;
while(scanf("%d", &n)!=EOF)
{
node *root = new node();
for(int i=; i<=n; i++)
{
scanf("%s", s);
AddTrie(s, root, i);
}
GetFail(root);
scanf("%d", &m);
int ans = ;
for(int i=; i<=m; i++)
{
scanf("%s", s);
memset(a, , sizeof(a));
memset(vis, , sizeof(vis));
cnt = ;
Query(s, root);
if(cnt)
{
ans++;
printf("web %d:", i);
sort(a, a+cnt);
for(int j=; j<cnt; j++)
printf(" %d", a[j]);
printf("\n");
}
}
printf("total: %d\n", ans);
FreeTrie(root);
}
return ;
}

病毒侵袭---hdu2896(AC自动机)的更多相关文章

  1. HDU2896:病毒侵袭(AC自动机)

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

  2. HDU2896 病毒侵袭 【AC自动机】

    HDU2896 病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一 ...

  3. HDU 2896 病毒侵袭(AC自动机)

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

  4. HDU 2896 病毒侵袭(AC自动机水)

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

  5. HDU 2896 病毒侵袭【AC自动机】

    <题目链接> Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一 ...

  6. hdoj 2896 病毒侵袭(AC自动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 思路分析:题目为模式匹配问题,对于一个给定的字符串,判断能匹配多少个模式:该问题需要静态建树,另 ...

  7. HDU 2896:病毒侵袭(AC自动机)

    http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:中文题意. 思路:AC自动机模板题.主要在于字符有128种,输出还要排序和去重! 注意是“total ...

  8. [HDU2896]病毒侵袭(AC自动机)

    传送门 题目中文描述,赞! 除了val记录id以外就是模板. 注意:每次数组都要清0.0 ——代码 #include <cstdio> #include <queue> #in ...

  9. HDU 2896 病毒侵袭 【AC自动机】

    HDU 2222 仅仅求出了和文本串匹配的模式串个数,本题要求求出匹配的模式串的编号. 不同的部分在代码中的注释部分. #include <cstdio> #include <cst ...

  10. HDU 2896 病毒侵袭 (AC自动机)

    这题模板题.............但是竟然要去重........调试了半天才发现.................... #include <cstdio> #include <i ...

随机推荐

  1. Vue 状态管理

    类flux状态管理的官方实现 由于多个状态分散的跨越在许多组件和交互间的各个角落,大型应用复杂度也经常逐渐增长. 为了解决这个问题,vue提供了vuex:我们有收到elm启发的状态管理库,vuex甚至 ...

  2. 高效学习Oracle的方法论

    Oracle的很多经验并不是来自工业环境.很多问题和经验都可以从自己的测试里积累        实验要做,但也要想!        那思维的起点是什么?        以下是我的看法.或者有些不合理: ...

  3. [转][Python基础]Python中的Lambda表达式

    引用自:http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html 在学习python的过程中,lambda的语法时常会使人感到困惑, ...

  4. 程序员自己编写的类和JDK类是一种合作关系

    封装类: JAVA为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被Object来装载. 除了int和char,其余类型首字母大写即成封装类. 转换字符的方式: int I=10; Str ...

  5. java----IO和NIO的区别

    概念:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套NIO ...

  6. sed替换

    1. sed可以替换给定的文本中的字符串,可以利用正则表达式进行匹配$ sed 's/pattern/replace_string/' file或者$ cat file | sed 's/patter ...

  7. PHPExcel导出插入图片和居中问题

    首先到网上先下载PHPExcel 下载后解压得到这两个文件 下载后引用该文件 最后编写相关代码: 首先是图片插入导出 $objDrawing = new PHPExcel_Worksheet_Draw ...

  8. php7 宏杂记

    php.h                                 zend_api.h ZEND_FN(name) ---> zif_##name PHP_FUNCTION(name) ...

  9. Gradle -- buildScript块与allprojects块及根级别的repositories区别

    http://blog.sina.com.cn/s/blog_72ef7bea0102vvg3.html

  10. 一稿设计多端适配优雅的解决方案 - rem

    规范目的 为提高前端团队开发效率,输出高质量的前端页面代码,提高UI设计还原度,特编写该规范文档.本文档如有不对或者不合适的地方请及时提出. JS代码块 (function (doc, win) { ...