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 ...
随机推荐
- 安装Eclipse环境变量的配置,
window7系统下的 步骤: 第一步:先安装JDK(记住你安装的位置)我安装在D:\Program Files\Java 目录下. 第二步:JDK安装好后,配置环境变量(重 ...
- WordPress博客平台的搭建--基于Ubuntu14服务器
环境:阿里云服务器,系统Ubuntu14.04, 阿里云域名 大致流程:LNMP+WordPress 主要参考博客:VPS+LNMP+WordPress搭建个人网站/博客 遇到的问题: 1.在登陆域名 ...
- NOIP 赛前模拟记录
8.11 T1 给定一个序列M,求出能过构造出的序列使得(Si+Si+1)/2=Mi成立的序列个数.保证M,S递增. T2 平面点集中最大的四边形面积 T3 不太懂得一道国家队选拔的加强版. 90+2 ...
- 完美解决scrollView 截屏图片模糊
UIGraphicsBeginImageContext 首先说明一下UIGraphicsBeginImageContextWithOptions 和UIGraphicsBeginImageCont ...
- Memcache学习笔记
以下内容大部分来自网络,小部分是本人遇到的问题融合后的记录. 先贴一段涨姿势~ Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全 ...
- Qt线程(4) 降低线程占用CPU
问题描述: 一般将计算量大的处理过程单独放置到一个单独的线程处理,因此很有可能你的处理过程需要while(1)或类似的操作. 也因此很有可能造成线程在处理时计算机CPU占用过高的情况. 解决办法: 降 ...
- .gitignore失效问题解决
.gitignore失效背景: 本地Mac上使用Unity新建了一个项目,使用git init将项目初始化为仓库,此时commit.随后,加入.gitignore文件,再次commit.然后提交整个仓 ...
- Oracle数据类型隐式转换小析
测试使用环境:oracle 11g r1 平常写sql语句时,大大咧咧,不太注意和数字有关的数据类型,有时例如 where c1=111 和 where c1='111'这样混用,却不曾想这里面另有蹊 ...
- 【Cocos2d-x 3.x】屏幕自适应匹配
在进行游戏开发时, 由于市场上的Android移动设备的分辨率有很多种,而且IOS移动设备的分辨率也不相同,为了能让手游能在90%以上的移动设备较为完美的运行,因此需要考虑屏幕的自适应问题,让一套资源 ...
- java中的程序流程控制
一.布尔逻辑1.布尔运算符:①短路和——&&:判断两个表达式,如果第一个为真,继续判断第二个表达式,如果第一个为假,就不需要判断第二个变大时②和——&:判断两个表达式,如果第一 ...