HDU2896 病毒侵袭
题目大意:给出若干病毒的特征码,不超过500个。每个病毒的特征码长度在20~200之间。现在有若干网站的源代码,要检测网站的源代码中是否包含病毒。网站的个数不超过1000个,每个网站的源代码长度在7000~10000之间。已知如果包含病毒,最多包含三个病毒。输出每个含病毒网站包含的病毒的编号等信息,最后输出含病毒网站的个数。
裸的AC自动机题目。一开始把病毒的个数弄错了。因为宏定义比较多,一开始没有弄#define,全弄的数字。后边发现数字错了。改了一下,又改漏了一个。后边看别人的discuss,说是什么连续不重复匹配。结果完全是误导人。就是一个普通的字符串匹配。以后还是用宏来定义数组长度吧
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXC 130
struct node
{
int id,fail,nxt[MAXC];
}trie[];
char word[],web[];
int head,tail,tot=,root=,myq[],ans[],bdk,n,m,bdwebs=,res[];
void insert(int r,char *s,int id)
{
int len=strlen(s);
for(int i=;i<len;i++)
{
if(trie[r].nxt[s[i]-]==)
trie[r].nxt[s[i]-]=++tot;
r=trie[r].nxt[s[i]-];
}
trie[r].id=id;
}
void build(int r)
{
trie[r].fail=r;
myq[tail++]=r;
while(head<tail)
{
r=myq[head++];
for(int i=;i<MAXC;i++)
{
int ch=trie[r].nxt[i],failp;
if(ch)
{
myq[tail++]=ch;
for(failp=trie[r].fail;failp!=root&&trie[failp].nxt[i]==;failp=trie[failp].fail);
if(trie[failp].nxt[i]==||trie[failp].nxt[i]==ch)
trie[ch].fail=failp;
else
trie[ch].fail=trie[failp].nxt[i];
}
}
}
}
void query(int r,char *s)
{
int len=strlen(s),tempfail;
for(int i=;i<len;i++)
{
while(trie[r].nxt[s[i]-]==&&r!=root)
r=trie[r].fail;
r=trie[r].nxt[s[i]-];
if(r==)r=root;
for(tempfail=r;tempfail!=root;tempfail=trie[tempfail].fail)
{
if(ans[trie[tempfail].id])break;
if(trie[tempfail].id>)
{ans[trie[tempfail].id]=;
}
}
}
}
int main()
{
root=;
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%s",word);
insert(root,word,i+);
}
build(root);
scanf("%d",&m);
for(int i=;i<m;i++)
{
scanf("%s",web);
memset(ans,,sizeof ans);
bdk=;
query(root,web);
for(int k=;k<;k++)
if(ans[k])res[bdk++]=k;
if(bdk>)
{
bdwebs++;
printf("web %d:",i+);
for(int k=;k<bdk;k++)
printf(" %d",res[k]);
printf("\n");
}
}
printf("total: %d\n",bdwebs);
return ;
}
HDU2896 病毒侵袭的更多相关文章
- hdu2896 病毒侵袭 AC自动机入门题 N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,
/** 题目:hdu2896 病毒侵袭 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:N(N <= 500)个长度不大于200的模式串 ...
- HDU2896 病毒侵袭 【AC自动机】
HDU2896 病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一 ...
- HDU2896 病毒侵袭 —— AC自动机
题目链接:https://vjudge.net/problem/HDU-2896 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- hdu2896 病毒侵袭 ac自动机
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...
- HDu-2896 病毒侵袭,AC自动机模板题!
病毒侵袭 模板题,不多说了.. 题意:n个不同的字符串分别代表病毒特征,给出m次查询,每次一个字符串(网址),求这个字符串中有几个病毒特征,分别从大到小输出编号,最后输出所有的带病毒网址个数.格式请看 ...
- HDU-2896 病毒侵袭 字符串问题 AC自动机
题目链接:https://cn.vjudge.net/problem/HDU-2896 题意 中文题 给一些关键词和一个字符串,问字符串里包括了那几种关键词 思路 直接套模版 改insert方法,维护 ...
- hdu2896病毒侵袭(ac自动机)
链接 ac自动机的模板题 说2个注意的地方 一是题目说明包含所有ASCII字符,可以开到0-127 包含空格 题目会输入多个源串,在加完当前的val值时,不应清0,可以开个标记数组. #include ...
- [HDU2896]病毒侵袭(AC自动机)
传送门 题目中文描述,赞! 除了val记录id以外就是模板. 注意:每次数组都要清0.0 ——代码 #include <cstdio> #include <queue> #in ...
- HDU2896 病毒侵袭 AC自动机模板
各种MLE,这模板感觉有问题,next数组开128也会MLE,实际上可见字符为编号32~126,只用开100就行. #include <iostream> #include <cst ...
随机推荐
- spring 包下载地址
留着,以备不时之需: http://repo.spring.io/libs-release-local/org/springframework/spring/
- HDU 4059 容斥初步练习
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...
- 从零开始学习Node.js例子九 设置HTTP头
server.js //basic server的配置文件 ; var server = require('./basicserver').createServer(); server.useFavI ...
- android 生成.keystore文件
cmd 进入jdk下的bin目录(我的目录:C:\Program Files\Java\jdk1.6.0_37\bin) keytool -genkey -alias xxx.keystore -ke ...
- Eclipse快捷键大全
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...
- 在Visual Lisp中处理自动化错误
Handling Automation errors in Visual LISP 翻译自原文Kean's blog:http://through-the-interface.typepad.com/ ...
- SpringMVC笔记
Struts1是采用单例模式的,在并发访问中出来资源混乱,于是出现Struts2被设计为多例的解决并发产生的 数据混乱由于Struts2引入了值栈,拦截器,OGNL等,,,是访问速度下降在原生的JSP ...
- [翻译] LTE/LTE-Advanced for Mobile Broadband-10.4
10.4 下行L1/L2控制信令 上下行信道的数据传输,需要特定的“下行控制信令”提供支持.下行控制信令通常被称为“下行L1/L2控制信令”,这表示该控制信令部分来自物理层(L1),部分来自MAC层( ...
- Dedecms自定义表单后台列表展现方式更改
Dedecms有自定义表单功能,方便我们收集用户信息.个人通常喜欢拿这个功能做问卷调查,在线留言等功能.但是如果使用过这个功能的朋友就会知道,Dedecms自定义表单后台列表展现方式并不好看. 上面就 ...
- MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的解决办法和原因
这两天下载了MySQL5.7.11进行安装,发现到了初次使用输入密码的时候,不管怎样都进不去,即使按照网上说的在mysqld 下面添加skip-grant-tables也是不行,后来研究了两天,终于找 ...