【HDOJ】2896 病毒侵袭
AC自动机模板题。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; #define TRIEN 128
#define MAXN 505 typedef struct Trie {
int in;
Trie *fail;
Trie *next[TRIEN];
Trie() {
in = ;
fail = NULL;
memset(next, , sizeof(next));
}
} Trie; Trie *root;
char src[], des[];
bool visit[MAXN]; void create(char str[], int in) {
int i = , id;
Trie *p = root, *q; while (str[i]) {
id = str[i];
++i;
if (p->next[id] == NULL) {
q = new Trie();
p->next[id] = q;
}
p = p->next[id];
}
p->in = in;
} void build_fail() {
int i;
Trie *p, *q;
queue<Trie *> que; for (i=; i<TRIEN; ++i) {
if (root->next[i]) {
root->next[i]->fail = root;
que.push(root->next[i]);
}
} while (!que.empty()) {
p = que.front();
que.pop();
for (i=; i<TRIEN; ++i) {
if (p->next[i]) {
q = p->fail;
while (q != NULL) {
if (q->next[i]) {
p->next[i]->fail = q->next[i];
break;
}
q = q->fail;
}
if (q == NULL)
p->next[i]->fail = root;
que.push(p->next[i]);
}
}
}
} void search() {
int i = , id;
Trie *p = root, *tmp; while (des[i]) {
id = des[i];
++i;
while (p->next[id]==NULL && p!=root)
p = p->fail;
p = p->next[id];
if (p == NULL)
p = root;
tmp = p;
while (tmp != root) {
visit[tmp->in] = true;
tmp = tmp->fail;
}
}
} void del(Trie *t) {
if (t == NULL)
return ;
for (int i=; i<TRIEN; ++i)
del(t->next[i]);
delete t;
} int main() {
int n, m, cnt, total;
int i; while (scanf("%d",&n) != EOF) {
root = new Trie();
for (i=; i<=n; ++i) {
scanf("%s", src);
create(src, i);
}
build_fail();
scanf("%d", &m);
total = ;
for (i=; i<=m; ++i) {
scanf("%s", des);
memset(visit, false, sizeof(visit));
search();
cnt = ;
for (int j=; j<=n; ++j) {
if (visit[j]) {
if (!cnt)
printf("web %d:", i);
++cnt;
printf(" %d", j);
}
}
if (cnt) {
printf("\n");
++total;
}
}
printf("total: %d\n", total);
del(root);
} return ;
}
【HDOJ】2896 病毒侵袭的更多相关文章
- hdoj 2896 病毒侵袭(AC自动机)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 思路分析:题目为模式匹配问题,对于一个给定的字符串,判断能匹配多少个模式:该问题需要静态建树,另 ... 
- hdu 2896 病毒侵袭 ac自动机
		/* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ... 
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
		病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ... 
- HDU 2896 病毒侵袭 (AC自己主动机)
		pid=2896">http://acm.hdu.edu.cn/showproblem.php?pid=2896 病毒侵袭 Time Limit: 2000/1000 MS (Java ... 
- HDU 2896 病毒侵袭(AC自动机水)
		病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ... 
- HDU 2896 病毒侵袭(AC自动机)
		病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ... 
- hdu 2896 病毒侵袭 AC自动机 基础题
		病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ... 
- HDU 2896 病毒侵袭
		Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福 ... 
- HDU 2896 病毒侵袭 AC自己主动机题解
		本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ... 
随机推荐
- javascript 可控速度的上下拉菜单
			样式部分 <style type="text/css"> *{ margin:0; padding:0; border:none; background:none;} ... 
- FastJson解析对象及对象数组--项目经验
			第一次使用json,解析工具为FastJson,使用语言为java 常见的json解析实例,以map为例: Map<String,String> map=new HashMap<St ... 
- day01-day04总结- Python 数据类型及其用法
			Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点 ... 
- EF 更新数据出现 System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: 异常
			EF6更新 数据出现 System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: Store update, insert, or ... 
- HashMap HashTable HashSet
			原文转载自 http://blog.csdn.net/wl_ldy/article/details/5941770 HashMap是新框架中用来代替HashTable的类 也就是说建议使用HashMa ... 
- java异步上传图片
			第一步:引入需要的js <script src="/res/common/js/jquery.js" type="text/javascript"> ... 
- Deep Learning  学习随记(五)深度网络--续
			前面记到了深度网络这一章.当时觉得练习应该挺简单的,用不了多少时间,结果训练时间真够长的...途中debug的时候还手贱的clear了一下,又得从头开始运行.不过最终还是调试成功了,sigh~ 前一篇 ... 
- SQL三大范式
			第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名.编号.地址.……)其中"地址"列还可 ... 
- css media
			/* media */ /* 横屏 */ @media screen and (orientation:landscape){ } /* 竖屏 */ @media screen and (orient ... 
- opencv 常用函数介绍
			××××××××××××××××××××××××××××××××××××××× CvScalar imgmean,imgstd; double imgmax,imgmin; cvAvgSdv(img, ... 
