题目大意:给出若干病毒的特征码,不超过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 病毒侵袭的更多相关文章

  1. hdu2896 病毒侵袭 AC自动机入门题 N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,

    /** 题目:hdu2896 病毒侵袭 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:N(N <= 500)个长度不大于200的模式串 ...

  2. HDU2896 病毒侵袭 【AC自动机】

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

  3. HDU2896 病毒侵袭 —— AC自动机

    题目链接:https://vjudge.net/problem/HDU-2896 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  4. hdu2896 病毒侵袭 ac自动机

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

  5. HDu-2896 病毒侵袭,AC自动机模板题!

    病毒侵袭 模板题,不多说了.. 题意:n个不同的字符串分别代表病毒特征,给出m次查询,每次一个字符串(网址),求这个字符串中有几个病毒特征,分别从大到小输出编号,最后输出所有的带病毒网址个数.格式请看 ...

  6. HDU-2896 病毒侵袭 字符串问题 AC自动机

    题目链接:https://cn.vjudge.net/problem/HDU-2896 题意 中文题 给一些关键词和一个字符串,问字符串里包括了那几种关键词 思路 直接套模版 改insert方法,维护 ...

  7. hdu2896病毒侵袭(ac自动机)

    链接 ac自动机的模板题 说2个注意的地方 一是题目说明包含所有ASCII字符,可以开到0-127 包含空格 题目会输入多个源串,在加完当前的val值时,不应清0,可以开个标记数组. #include ...

  8. [HDU2896]病毒侵袭(AC自动机)

    传送门 题目中文描述,赞! 除了val记录id以外就是模板. 注意:每次数组都要清0.0 ——代码 #include <cstdio> #include <queue> #in ...

  9. HDU2896 病毒侵袭 AC自动机模板

    各种MLE,这模板感觉有问题,next数组开128也会MLE,实际上可见字符为编号32~126,只用开100就行. #include <iostream> #include <cst ...

随机推荐

  1. 数据挖掘系列(1)关联规则挖掘基本概念与Aprior算法

    整理数据挖掘的基本概念和算法,包括关联规则挖掘.分类.聚类的常用算法,敬请期待.今天讲的是关联规则挖掘的最基本的知识. 关联规则挖掘在电商.零售.大气物理.生物医学已经有了广泛的应用,本篇文章将介绍一 ...

  2. CodeVS 线段覆盖1~5

    #include <bits/stdc++.h> using namespace std; ; struct Info{int l,r;}P[Maxn]; int n,Cnt,F[Maxn ...

  3. C#在Dictionary中使用枚举作为键

    Enum类型没有实现IEquatable接口,Dictionary中使用Enum作为键时,将发生装箱,使效率降低. 此时可用Dictionary中一个接收IEqualityComparer<T& ...

  4. Block对象

    背景:回调机制中回调设置代码和回调方法的具体实现无法写在同一段代码中.Mac OS X 10.6和iOS4种引入了Block对象.Block对象看上去是一段代码,但是可以当作数据来传递. 定义Bloc ...

  5. C语言读取PE文件信息(一)

    接下来的内容来源于对该博客文章http://www.pediy.com/kssd/pediy06/pediy7006.htm的解析. 一.打印Sections信息.下面的程序打印出Windows_Gr ...

  6. ios网络知识

    http://www.cocoachina.com/bbs/read.php?tid-31300.html  启蒙内容 http://blog.csdn.net/nono_love_lilith/ar ...

  7. (实用篇)浅谈PHP拦截器之__set()与__get()的理解与使用方法

    "一般来说,总是把类的属性定义为private,这更符合现实的逻辑. 但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数"__get()"和&q ...

  8. JavaBean学习总结(上)

    一.何为JavaBean: 遵循特定规则的Java类,必须为共有类: 1. 需要对成员属性私有化: 2. 需要无参的构造函数: 3. 需要通过public方法将私有属性暴露给其他程序,且方法遵循一定命 ...

  9. ASP.NET中Cookies的使用

    准备开始写后台代码了,不过刚看到cookies就傻眼了,网上搜集了一些资料,总结了一下,初学者可以看看. 创建COOKIES System.Web.HttpCookie cookie=new Http ...

  10. iOS页面传值-wang

    iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...