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

Problem Description
当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻。。。。在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~
但网路上总有那么些网站,开始借着民众的好奇心,打着介绍日食的旗号,大肆传播病毒。小t不幸成为受害者之一。小t如此生气,他决定要把世界上所有带病毒的网站都找出来。当然,谁都知道这是不可能的。小t却执意要完成这不能的任务,他说:“子子孙孙无穷匮也!”(愚公后继有人了)。
万事开头难,小t收集了好多病毒的特征码,又收集了一批诡异网站的源码,他想知道这些网站中哪些是有病毒的,又是带了怎样的病毒呢?顺便还想知道他到底收集了多少带病毒的网站。这时候他却不知道何从下手了。所以想请大家帮帮忙。小t又是个急性子哦,所以解决问题越快越好哦~~
Input
第一行,一个整数N(1<=N<=500),表示病毒特征码的个数。
接下来N行,每行表示一个病毒特征码,特征码字符串长度在20—200之间。
每个病毒都有一个编号,依此为1—N。
不同编号的病毒特征码不会相同。
在这之后一行,有一个整数M(1<=M<=1000),表示网站数。
接下来M行,每行表示一个网站源码,源码字符串长度在7000—10000之间。
每个网站都有一个编号,依此为1—M。
以上字符串中字符都是ASCII码可见字符(不包括回车)。
Output
依次按如下格式输出按网站编号从小到大输出,带病毒的网站编号和包含病毒编号,每行一个含毒网站信息。
web 网站编号: 病毒编号 病毒编号 …
冒号后有一个空格,病毒编号按从小到大排列,两个病毒编号之间用一个空格隔开,如果一个网站包含病毒,病毒数不会超过3个。
最后一行输出统计信息,如下格式
total: 带病毒网站数
冒号后有一个空格。
Sample Input
3 aaa bbb ccc 2 aaabbbccc bbaacc
Sample Output
web 1: 1 2 3
total: 1
分析: 此题由于不止一个文本串,所以在每次自动机运行结束后,要将原来的网站序号还原。
code:
View Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[222],s[10010];
int front,rear,K,n;
int f[6];
int cmp(const void*p1,const void*p2)
{
return *(int*)p1-*(int*)p2;
}
struct node
{
node *fail;
node *next[128];
int count;
node ()
{
fail=NULL;
count=0;
memset(next,0,sizeof(next));
}
}*q[500001],*r[600];
void add(char *a,node *root,int num)
{
int i=0,x;
node *p=root;
while(a[i])
{
x=a[i];
if(p->next[x]==NULL)
p->next[x]=new node();
p=p->next[x];
i++;
}
p->count=num;
r[num]=p;
}
void build_ac(node *root)
{
int i;
front=rear=0;
root->fail=NULL;
q[rear++]=root;
while(front<rear)
{
node *x=q[front++];
node *p=NULL;
for(i=0;i<128;i++)
if(x->next[i]!=NULL)
{
if(x==root)
x->next[i]->fail=root;
else
{
p=x->fail;
while(p!=NULL)
{
if(p->next[i]!=NULL)
{
x->next[i]->fail=p->next[i];
break;
}
p=p->fail;
}
if(p==NULL)
x->next[i]->fail=root;
}
q[rear++]=x->next[i];
}
}
}
void ac(node *root)
{
K=0;
int i=0,tot=0,x,len=strlen(s);
node *p=root;
while(s[i]&&K<3)
{
x=s[i];
while(p->next[x]==NULL&&p!=root)
p=p->fail;
p=p->next[x];
p=(p==NULL)?root:p;
node *tmp=p;
while(tmp!=root&&tmp->count!=-1)
{
if(tmp->count)
f[K++]=tmp->count;
tmp->count=-1;
tmp=tmp->fail;
}
i++;
}
for(i=1;i<=n;i++)
r[i]->count=i;
}
int main()
{
int i,m,j,tot;
char ch=0;
while(scanf("%d",&n)!=EOF)
{
node *root;
root=new node();
for(i=1;i<=n;i++)
{
scanf("%s",str);
add(str,root,i);
}
build_ac(root);
tot=0;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%s",s);
ac(root);
if(K)
{
printf("web %d:",i);
qsort(f,K,sizeof(f[0]),cmp);
for(j=0;j<K;j++)
printf(" %d",f[j]);
printf("\n");
tot++;
}
}
printf("total: %d\n",tot);

}
return 0;
}

转载于:https://www.cnblogs.com/dream-wind/archive/2012/03/29/2424397.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

风靡全球的人工智能,如何赶上这班车?

目前&#xff0c;机器学习的使用日渐成为趋势。作为人工智能的核心&#xff0c;机器学习是一门多领域的交叉学科&#xff0c;专门研究计算机模拟或实现人类学习行为的方法&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。简单来说…

java spark读写hdfs_Spark读取HDFS数据输出到不同的文件

最近有一个需求是这样的&#xff1a;原来的数据是存储在MySQL&#xff0c;然后通过Sqoop将MySQL的数据抽取到了HDFS集群上&#xff0c;抽取到HDFS上的数据都是纯数据&#xff0c;字段值之间以\t分隔&#xff0c;现在需要将这部分数据还原为json格式的&#xff0c;因为这样做的原…

15个创意的电梯广告

如果你走进任何一个城市&#xff0c;几乎每一个地方有电梯&#xff0c;但是你发现具有创意的广告电梯了吗&#xff0c;分享给大家15个不同城市的创意的电梯广告&#xff0c;作为设计师可以帮助你 Accor Air Asia Becel Body World Coke Zero Consol Energy Fiat Punto Forklift…

揭秘全球开发最新趋势!JS开发者达1380万,C#超越PHP,Rust增长最快

文 | 白开水出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;研究公司 SlashData 最新发布的”State of the Developer Nation“第 20 版报告指出&#xff0c;全球开发者社区在过去六个月中的经历了巨大的增长。据估计&#xff0c;截至 2021 年第一季度&a…

怎样判断漂亮女孩是不是单身的?

全世界有3.14 % 的人已经关注了数据与算法之美不解风情的死理性派们在情感生活中不免会遇到这样悲催的一幕&#xff1a;偶然间遇到一位心仪的漂亮女孩&#xff0c;从此日思夜想&#xff0c;废寝忘食&#xff0c;开始了漫长的暗恋之旅。等到一日&#xff0c;在无尽的纠结中&…

java开源cad_寻找 AutoCAD 替代品,5款免费开源 CAD 软件推荐

FreeCADFreeCAD 是一种通用的3D CAD建模。完全开源(LGPL许可证)FreeCAD 直接的目的是在机械工程和产品设计&#xff0c;也适合在更广泛的用途&#xff0c;如建筑行业或其他工程专业&#xff0c;工程相关领域。FreeCAD 全平台通用&#xff0c;能完美工作在 Windows、Linux 和 ma…

快速弄懂陌生领域是一项“赚钱”的能力

大家好&#xff0c;我是Z哥。有时候&#xff0c;我们被动的需要去了解一个新行业或者领域。比如&#xff0c;工作需要、投资需要等等。在这个时候&#xff0c;你能不能快速弄懂一个行业的80%&#xff0c;成为一个内行就很关键了。毕竟时机可是很重要的。比如&#xff0c;你想了…

java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...

好久没见了在项目中遇到一个小小的需求&#xff0c;总结了一下&#xff01;详细我就不介绍了&#xff0c;相信大家用过的话&#xff0c;很了解。详见文档----------->http://element-cn.eleme.io/#/zh-CN/component/message-box#messagebox-dan-kuang项目需求——关于Elemen…

6年后再一次Hello World!这本书让你久等了!

移动互联网和手机智能化浪潮带来了全新的手机游戏模式。而随着手机游戏开发逐渐成熟&#xff0c;手机游戏开发门槛的降低&#xff0c;越来越多的开发者希望加入到这一行业中。Unity作为一款优秀的游戏引擎&#xff0c;为广大游戏开发者提供了高效、简洁的开发流程&#xff0c;使…

MATLAB图像处理与数字信号处理资料分享来袭

小天从大学开始接触数学建模&#xff0c;便开启资料收集功能。经过近几年的积累和沉淀&#xff0c;再加上对数学建模领域的深入研究&#xff0c;收集整理了丰富的数学建模资料&#xff0c;内容涵盖“MATLAB图像处理”&#xff0c;“数字信号处理与MATLAB实现”等。截止到今天&a…

java换水_java-交流灌水之谁是水王?

设计思想&#xff1a;水王是发帖和回帖最多的那个&#xff0c;总数会超过总贴数的一半还要多&#xff0c;我的思想是&#xff0c;当两个挨着的人发帖的id不同就进行抵消&#xff0c;最后剩下来的就是总数超过一半的“水王”的id;代码实现:package demo;public class text1 {sta…

数学学得好,才可以发现别人发现不了的挣钱良机

全世界有3.14 % 的人已经关注了数据与算法之美2011年&#xff0c;美国波士顿地区的一种彩票 “Cash WinFal”爆出了一个存在已久的漏洞。让人惊奇的是&#xff0c;一对 73 岁的夫妇已经利用这个漏洞赚了超过 600 万美元 。一时间风雨满城&#xff0c;马萨诸塞州也宣布要开始调查…

Async和Await异步编程的原理

1. 简介 从4.0版本开始.NET引入并行编程库&#xff0c;用户能够通过这个库快捷的开发并行计算和并行任务处理的程序。在4.5版本中.NET又引入了Async和Await两个新的关键字&#xff0c;在语言层面对并行编程给予进一步的支持&#xff0c;使得用户能以一种简洁直观的方式实现并行…

细数那些让人难以抗拒的经典数学书

如果有人不相信数学是简单的,那是因为他们没有意识到人生有多复杂。——冯诺依曼近期有关数学的好消息还是蛮多的&#xff0c;先有阿里巴巴举办全国数学竞赛&#xff0c;奖金百万&#xff0c;只为爱好数学的你。快来看看下面这些竞赛试题&#xff0c;我想应该难不倒我们的小伙伴…

java对jar包的复制_Java安全之jar包调试技巧

Java安全之jar包调试技巧调试程序首先还是创建一个工程&#xff0c;将jar包导入进来调试模式的参数启动中需要加入特定参数才能使用debug模式&#xff0c;并且需要开放调试端口JDK5-8:-agentlib:jdwptransportdt_socket,servery,suspendy,address5005JDK9&#xff1a;-agentlib…

一次Redis client组件性能分析

BeetleX也扩展了RedisClient驱动&#xff0c;写这些高并发应用的驱动性能测试分析是必不可少的。在最近一次测试中发现测试采样度不足&#xff0c;引起的一些问题&#xff1b;通过这一次的问题也警醒一下自己在以后设计上要考虑更多细节的特性需求。发现问题在写组件的时候往往…

男生追女生的超强数学建模分析

全世界有3.14 % 的人已经关注了数据与算法之美问题分析男生追女生&#xff0c;对男生来说最重要的是学习、爱情两不误。因此我们引进男生的学业成绩函数Y(t)。首先&#xff0c;我们不考虑男生的追求攻势&#xff0c;则影响该函数的因素主要是两个人的关系程度。为了便于分析&am…

java设计模式face_java设计模式之-------原型模式

一、模式定义用原型实例指定要创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象。二、模式场景假设此处结合23中设计模式记忆篇作出假设&#xff0c;不关心逻辑是否合理。柳岩在跳舞的时候烧伤了脸&#xff0c;再也回不到原来的型状。他就克隆一张脸。类图如下&#…

你被这些网络迷题难倒过吗?

全世界有3.14 % 的人已经关注了数据与算法之美消失的正方形这是数学游戏大师马丁加德纳在《从惊讶到思考》一书中提到过的例子。重新摆放分割的小块图形后&#xff0c;上面的正方形中少了一个小方格&#xff0c;它去了哪里&#xff1f;我们不妨实际操作一下&#xff0c;做两个全…

温故知新,.Net Core遇见Blazor(FluentUI),属于未来的SPA框架

什么是BlazorBlazor是一个使用.NET生成交互式客户端WebUI的框架:使用C#代替JavaScript来创建信息丰富的交互式UI。共享使用.NET编写的服务器端和客户端应用逻辑。将UI呈现为HTML和CSS&#xff0c;以支持众多浏览器&#xff0c;其中包括移动浏览器。与新式托管平台&#xff08;如…