题目链接: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. 浏览器 本地预览图片 window.url.createobjecturl

    第一种方式 <script type="text/javascript"> function setImagePreview() { var docObj = docu ...

  2. dp之完全背包poj2063

    题意:求投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币. 注意:每一年收到的利息都可以作为下一年的本金......其实从测试数据来看,是很好看出来的...... 思路 ...

  3. 纯css3实现的竖形二级导航

    之前为大家分享了好多导航菜单.今天给大家带来一款纯css3实现的竖形二级导航.这款导航菜单可以是无限级.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <div styl ...

  4. 纯css3实现的鼠标悬停动画按钮

    今天给大家带来一款纯css3实现的鼠标悬停动画按钮.这款按钮鼠标经过前以正方形的形式,当鼠标经过的时候以动画的形式变成圆形.效果图如下: 在线预览   源码下载 实现的代码. html代码: < ...

  5. cacati的安装

    一.安装rrdtool软件包 yum install -y cairo-devel libxml2-devel pango-devel pango libpng-devel freetype free ...

  6. Discretized Streams, 离散化的流数据处理

    Discretized Streams: An Efficient and Fault-Tolerant Model for Stream Processing on Large Clusters   ...

  7. Hadoop源码分析之Configuration

    转自:http://www.it165.net/admin/html/201312/2178.html org.apache.hadoop.conf.Configuration类是Hadoop所有功能 ...

  8. hdu 5065 数学题

    #include<iostream> #include<cmath> #include<cstdio> using namespace std; int A,B,y ...

  9. [转]Shell脚本中发送html邮件的方法

    <span "="">作为运维人员,免不了要编写一些监控脚本,并将监控结果及时的发送出来.那么通过邮件发送是比较常用的一种通知方式了.通常的,如果需要发送的内 ...

  10. 10条建议帮助你创建更好的jQuery插件

    本文总结了帮助你创建更好jQuery插件的10条建议.分享给大家供大家参考.具体说明如下: 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就 ...