这题模板题.............但是竟然要去重........调试了半天才发现....................

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; struct trie {
trie *next[128];
int flag;
int num;
trie *fail;
trie() {
fail = NULL;
flag = num = 0;
memset(next,0,sizeof(next));
}
}*q[511111]; trie *rt = new trie();
int vi[555],cnt,head,tail;
char keyword[222];
char book[11111]; void insert(char *key,int num) {
trie *p = rt;
while(*key) {
int t = int(*key);
if(p->next[t] == NULL) p->next[t] = new trie();
p = p->next[t];
key ++;
}
p->flag = 1;
p->num = num;
} void bfs() {
rt->fail = NULL;
head = tail = 0;
q[head++] = rt;
while(head != tail) {
trie *t = q[tail++];
trie *tmp = NULL;
for(int i=0; i<128; i++) {
if(t->next[i] != NULL) {
if(t == rt ) t->next[i]->fail = rt;
else {
tmp = t->fail; //沿着父亲的fail指针走
while(tmp != NULL) {
if(tmp->next[i] != NULL) {
t->next[i]->fail = tmp->next[i];
break;
}
tmp = tmp->fail;
}
if(tmp == NULL) t->next[i]->fail = rt;
}
q[head++] = t->next[i];
}
}
}
} void query(char *key) {
trie *p = rt;
cnt = 0;
int ok = 0;
while(*key) {
int t = int(*key);
while(p != rt && p->next[t] == NULL) p = p->fail;
p = p->next[t];
if(p == NULL) p = rt;
trie *tmp = p;
while(tmp != rt && tmp->flag != 0) {
vi[cnt] = tmp->num;
cnt += tmp->flag;
tmp = tmp->fail;
}
key++;
}
}
int main() {
int n,m;
cin >> n;
getchar();
for(int i=0; i<n; i++) {
gets(keyword);
insert(keyword,i+1);
}
bfs();
int ans = 0;
cin >> m;
getchar();
for(int i=1; i<=m; i++) {
gets(book);
memset(vi,0,sizeof(vi));
cnt = 0;
query(book);
if(cnt != 0) {
ans ++;
printf("web %d:",i);
sort(vi,vi+cnt);
int dd = unique(vi , vi + cnt) - vi;
for(int j=0; j<dd; j++) printf(" %d",vi[j]);
puts("");
}
}
printf("total: %d\n",ans);
return 0;
}

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

  1. hdu 2896 病毒侵袭 ac自动机

    /* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...

  2. hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)

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

  3. hdu 2896 病毒侵袭 AC自动机 基础题

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

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

    pid=2896">http://acm.hdu.edu.cn/showproblem.php?pid=2896 病毒侵袭 Time Limit: 2000/1000 MS (Java ...

  5. hdu 2896 病毒侵袭_ac自动机

    题意:略 思路:套用ac自动机模板 #include <iostream> #include<cstdio> #include<cstring> using nam ...

  6. HDU 2896 病毒侵袭 AC自己主动机题解

    本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...

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

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

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

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

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

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

  10. hdu2896 病毒侵袭 ac自动机

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...

随机推荐

  1. 一个PHP常用表单验证类(基于正则)

    一个基于正则表达式的PHP常用表单验证类,作者:欣然随风.这个表单判断类的功能有:验证是否为指定长度的字母/数字组合.验证是否为指定长度汉字.身 份证号码验证.是否是指定长度的数字.验证邮件地址.电话 ...

  2. Google地图

    Google地图开发总结 我们经常使用地图查位置.看公交.看街景,同时地图还开放第三方的API给开发者.利用这些API进行地图的个性化的展示和控制,例如北京被水淹了,开发一个网页显示北京被淹的地图,地 ...

  3. ie浏览器下HTML上传控件input=file的美化

    近期写东西用到了input=file这个按钮,给其添加背景,在其它浏览器上都可以正常的显示,可一到ie上便不听话了,完全没有添加上,显的很难看.今天在网上找到一方法,试过后感觉很好,终于把这个问题给解 ...

  4. Mssql显错和不显错模式下的注入

    Title:Mssql显错和不显错模式下的注入 -- 2010-10-27 19:51 近期用手工注入用习惯了,便列出最近用的Mssql语句,以后方便拿来用! -------------------- ...

  5. 委托 delegate, 继承

    c# 的委托就是说把函数当参数来传递. 这个在js完全就用不着搞什么委托东西,直接转就是了嘛.对不对!怎么录嘛! 一个函数,如果它的参数是函数,那么是这样子写的 public void method( ...

  6. 交叉编译环境以及开发板上-/bin/sh: ./hello: not found(使用arm-linux-gcc -static -o 来进行静态编译)

    目标板是S3C2440.至于交叉编译环境的搭建就不多说了,网上很多教程. 搭建好了交叉编译环境后,第一件事就是传说中的”Hello,World!”. 一. 主机编译环节 我使用的系统是ubuntu10 ...

  7. cf509E Pretty Song

    E. Pretty Song time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. 超给力的HTML5 3D动画欣赏及源码下载

    HTML5有着非常巨大的魅力,尤其是CSS3和Cavnas,可以帮助页面渲染得非常炫酷.值得一提的是,利用HTML5的3D特性可以帮助你更加方便地在网页上实现3D动画特效.本文分享的这些HTML5 3 ...

  9. C++中的string类(1)

    http://blog.sina.com.cn/s/blog_51409e8f01009h7g.html 前言: string 的角色1 string 使用1.1 充分使用string 操作符1.2 ...

  10. 给大家推荐一款代替Visio的在线作图工具ProcessOn

    过去作图的时候一直都是在用visio,每一次换了电脑使用都要重新安装,这大家都知道,最头疼的就是激活问题,曾经因为激活问题我“找遍了”正个互联网,最后还没找到...从08年开始到现在,visio用了这 ...