HDU2896-病毒侵袭 AC自动机

C++病毒 都知道我用Python做过病毒,做过很多病毒,但有人知道我用C++也做病毒吗?C++是离操作系统最近的编程语言之一,因此C++的运行速度极快,这也导致了我特别喜欢用C++做病毒。大家有没有玩过一个操作,首先新建一个文本文档,在里面写上start https://www.pranx.com/hacker/,然后把后缀名改成bat?对了,如果你的攻击对象网络不好的话,还可以加一个打开百度。C++里有3中循环:for循环,while循环,do-while循环。这个就是C++打开cmd的代码。 阅读详情

HDU2896-病毒侵袭:http://acm.hdu.edu.cn/showproblem.php?pid=2896

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

本题在AC自动机的模板上面做了一些小改动,将End数组作为记录id的数组了,还有就是传入参数的一点区别。

我的格式就是参照着kuangbin的格式来的,基本和他的一样,自己写也写不来。等下给出他的博客地址。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
struct Trie{
	int Next[210*500][128],Fail[210*500],End[210*500];//210*500是基于字典树没有交叉的最坏情况来算的节点个数
	int root,L;//注意是全局变量
	int NewNode()
	{
		for(int i=0;i<128;i++)
			Next[L][i]=-1;
		End[L++]=-1;//每插入一个节点都让编号加一,最终L的大小就是节点个数
		return L-1;//返回节点编号 
	}
	void Initial()
	{
		L=0;
		root = NewNode();
	}
	void Insert(char buf[],int id)//建字典树的过程
	{
		int len=strlen(buf);
		int now = root;//都从根节点开始插入 
		for(int i=0;i<len;i++)
		{
			if(Next[now][buf[i]]==-1)
				Next[now][buf[i]] = NewNode();
			now = Next[now][buf[i]]; 
		}
		End[now] = id;//以  病毒的结尾字符节点的编号now  为下标的End[now]记录的就是id 
	}
	void Build()//建立失败指针
	{
		queue<int>ans;
		Fail[root]=root;
		for(int i = 0;i < 128;i++)//直接和根节点相连的节点
		{
			if(Next[root][i]==-1)
				Next[root][i]=root;
			else{
				Fail[Next[root][i]] = root;
				ans.push(Next[root][i]);
			}
		}	
		while(!ans.empty())
		{
			int now = ans.front();
			ans.pop();
			for(int i=0;i < 128;i++)
			{
				if(Next[now][i]==-1)
					Next[now][i]=Next[Fail[now]][i];
				else{
					Fail[Next[now][i]] = Next[Fail[now]][i];
					ans.push(Next[now][i]);
				} 
			}
		}
	} 
	bool Used[510];//建立标记数组,出现过的病毒的id
	bool Query(char buf[],int N,int id)
	{
		int now = root;
		int len = strlen(buf);
		memset(Used,false,sizeof(Used));
		bool flag = false;
		for(int i = 0;i < len;i++)
		{
			now = Next[now][buf[i]];
			int temp = now;
			while(temp != root)
			{
				if(End[temp] != -1)
				{
					flag = true;
					Used[End[temp]] = true;//出现的id为End[temp]的病毒
				}
				temp = Fail[temp];
			}
		}
		if(!flag)return false;
		printf("web %d:",id);
		for(int i=1;i<=N;i++)
			if(Used[i])
			printf(" %d",i);
		printf("\n");
		return true;
	} 
};
Trie AC;
char buf[11111];
int main()
{
	int N,M;
	while(scanf("%d",&N)!=EOF)
	{
		AC.Initial();//初始化 
		for(int i=1;i<=N;i++)//建字典树 
		{
			scanf("%s",buf); 
			AC.Insert(buf,i);
		}
		AC.Build();//建失败指针
		int res = 0;
		scanf("%d",&M); 
		for(int i=1;i<=M;i++)
		{
			scanf("%s",buf);
			if(AC.Query(buf,N,i))//i是网站编号 
				res++;
		}
		printf("total: %d\n",res);
	}	
	return 0;
} 

kuangbin的AC自动机模板: http://www.cnblogs.com/kuangbin/p/3164106.html

c++简易病毒程序(dev++) 我们将用dev++制作一个简易病毒。作者本人差点挂了... 阅读详情

相关推荐

Hdu 2896 病毒侵袭 AC自动机

病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 26485    Accepted Submission(s): 6210 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光

J. Cole 750

一段简单的C/C++病毒源程序

主要是感染C/C++源文件只要编译该段源程序就会使当前目录里的所有.c和.cpp文件感染上病毒,当然如果是没有主函数的源文件就没有作用:思想很简单:插入一段复制自身的代码,而这段代码是将自身的病毒部分传播给同目录下的其它文件。

mycaibo编程 1万+

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

hdu 2896 病毒侵袭 //AC自动机

<br /> <br />病毒侵袭Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)<br />Total Submission(s): 1621    Accepted Submission(s): 423<br /><br /><br />Problem Description当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻。。。。在这样的时刻,人们却异常兴奋——我们能在有

hqd_acm的专栏 1702

PPO实战:如何用强化学习让小车爬上MountainCarContinuous-v0山顶(附完整代码)

本文提供了使用PPO算法解决MountainCarContinuous-v0环境的完整实战教程。针对该环境的连续动作空间和稀疏奖励挑战,文章详细解析了PPO智能体的网络架构、状态归一化、GAE优势估计等核心实现,并附带了可直接运行的PyTorch代码。同时分享了关键的调参技巧和实战避坑指南,帮助读者高效训练智能体完成小车爬坡任务。

linux的博客 968

图形引擎实战:镭射效果制作分享

该方案的优势1.遵循物理的2.可以使用少量的参数去调控镭射的效果。计算相对简单,缺点仍是颜色不能够自定义,还有一种常见的方案是采样一张镭射贴图来模拟,好处是颜色可以自定义同时性能上还很高效没有复杂的公式计算。我查阅了网上普遍的方案,常见的做法是制作一个Ramp图生成工具,然后将生成好的ramp图赋给材质。这两个方案的好处是美术同学可以手动的去控制镭射的颜色。最后就是Shader中对Ramp图的采样的部分,Ramp图的UV坐标是使用fresnel作为Ramp的U轴坐标,0.5作为V轴坐标。

qq_41166022的博客 1350

C++【基础】病毒繁殖

第9分钟时,第5分钟复制出的病毒粒子开始复制新的病毒粒子,因此第9分钟时的病毒总数为7;第10分钟时,第6分钟复制出的病毒。举例来说,第1分钟时有一个病毒粒子,此病毒粒子从第5分钟开始复制新的病毒粒子,因此第5分钟时的病毒数量为2个;某种病毒具有很强的繁殖能力,从病毒粒子出生后的第5分钟开始,每分钟可以复制出一个新的病毒粒子。计算病毒粒子总数,已知第一分钟时出生了一个病毒粒子,假设所有病毒粒子不会自动死亡,请计算第N分钟的病毒总数。粒子开始复制新的病毒粒子,因此第10分钟时的病毒粒子总数为10。

PIA2011的博客 1971

NLP自然语言处理:神经网络语言模型(NNLM)

目录 一、传统语言模型 1.1 稀疏性 1.2泛化能力差 二、神经网络语言模型 2.1 前馈神经网络模型(FFLM) 2.2 循环神经网络模型(RNNLM) 2.2.1循环神经网络模型示例 2.2.2RNN语言模型训练过程 2.2.3RNN语言模型反向传播 2.2.4语言模型评估 语言模型的构建目的是为了对语言中的各要素的分布进行估计,具有较长的研究历史和广泛...

陈宸的博客 1万+

hdu 2896 病毒侵袭 ac自动机

1 /* 2 hdu 2896 病毒侵袭 ac自动机 3 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 4 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 。本题中主要是计算每一个模式串 5 在主串中有没有出现过,而不是计算出现过多少次,所以将last[]数组省掉.... 6 */ ...

aipiannian6725的博客 208

【教程4>第4章>第12节】通过FPGA实现基于FFT变换的频偏估计和补偿

基于FFT变换的频偏估计和补偿,其基本原理如下:而频偏补偿的目的是将频偏后的信号频谱移回原来的位置。

FPGA/MATLAB学习教程/源码/项目合作开发 881

点云最小二乘法拟合曲线

文章目录一、引言 一、引言

dayuhaitang1的博客 2733

AC自动机(2)--hdu2896(病毒侵袭)(基础题)

病毒侵袭             Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u Description

Sly_461的博客 828

《大数据最全面试题-Offer直通车》目录

做好这些不用担心试用期不通过:程序员入职新公司如何快速上手项目本人遇到大数据面试题和参考答案(超过1万字精华版)大数据面试英文自我介绍参考(万字长文)大数据运维应用场景面试题汇总及参考答案(持续更新)万字数据仓库面试题及参考答案数据仓库数据质量监控和处理方法最佳实践数据仓库建模方法万字详解Doris的3种数据模型详解和数据仓库每一层的模型选用大数据面试临阵磨枪不知看什么?看这份心理就有底了-大数据常用技术栈常见面试100道题最全Hive面试题2024年(2万字详解)Elasticsearch 面试题及参考答

大模型大数据攻城狮的专栏 2633

hdu 2896 病毒侵袭(ac自动机)

Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻。。。。在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~但网路上总有那么些网站,开始借着民众的好奇心,打着介绍日食的旗号,大肆传播病毒。小t不幸成为受害者之一。小t如此生气,他决定要把世界上所有带病毒的网站都找出来。当然,谁都知道这是不可能的...

weixin_30251587的博客 90

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU 2896 病毒侵袭 AC自动机裸题

题目来源:HDU 2896 病毒侵袭 题意:求文本串中有多少个模式串 并且输出下标 思路:直接ac自动机 然后数组记录在输出 我日写了半天结果函数没调用 找了半天错误 你要长记性啊 这种错误犯了好几次了啊 笨蛋 #include #include #include using namespace std; const int maxn = 10010; char a[maxn];

嗯。 988

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HDU 2896 病毒侵袭(AC自动机)

HDU 2896 病毒侵袭(AC自动机) 题意:给你一组模板,然后在给你多个文本,要你去匹配文本,看看每个文本中都出现了哪些模板然后输出即可. 分析:本题的模板不会重复,题目中已说明.        不过本题的字符是所有ASCII码可见字符,所以sigma_size=128. AC代码:

code 1160

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

hdu 2896 病毒侵袭 (AC自动机)

hdu 2896 病毒侵袭 基础AC自动机

yjCola 524

HDU2896.病毒侵袭中【MLE和PE的原因】【AC自动机模板题】

HDU#2896.病毒侵袭中(重点:MLE和PE)AC自动机题目飞机票 其他AC自动机练习题目(谢谢kuangbin的题目) AC自动机题解网上的题解已经很清楚了,我也不再赘述╰(´︶`)╯ 给你几个串还有几个模式串,问每一个模式串的匹配数量和总的匹配数量 一个AC自动机的版题,为什么要发个BlogBlog也是为了给大家说一声: 如果你写的PE了,很简单,web后面的输出行末不能有空格,先f

snowMyDream's BLOG 1459

【AC自动机】HDU - 2896 病毒侵袭(字典树应该开多大的数组???)

无所谓 慢慢来 迷宫一样的未来

L_X_ 337

病毒侵袭 HDU - 2896(AC自动机)

思路:在建树的时候吧每个病毒的编号加进去,在match的时候找到对应的值,因为最多3个病毒,所以找到3个直接退出。 #include <cstdio> #include <cstring> #include <algorithm> #include <set> #include<iostream> #include<vector> #include<queue> //#include<bits/stdc++.h&g..

Ray.C.L的博客 412

HDU2896 病毒侵袭 AC自动机

题目大意:给出n个病毒和n个网站,找出每一个网站中含有的病毒种类,并按病毒编号升序输出,最后统计含有病毒的网站个数。 分析:比较裸的AC自动机的题,我们可以在构造tire树的过程中顺便把编号插入,然后询问时纪录病毒个数的同时用一个数组纪录病毒的编号,然后排序输出即可(WA若干次才发现忘把病毒按编号排序后再输出了)。还有就是本题空间卡的很死,你要是按题意(每一个字符都是课件的ASC2可见代

AC_Gibson的专栏 2024

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

http://acm.hdu.edu.cn/showproblem.php?pid=2896HDU 2896 病毒侵袭大意:有n种病毒,编码已知。有m个网站源码,求带病毒的网站个数以及其对应的病毒Sample Input3aaabbbccc2aaabbbcccbbaacc Sample Outputweb 1: 1 2 3total: 1 hint:有3种病毒,编码分别为aaabb...

a48634331的博客 118

HDU2222 Keywords Search + HDU2896病毒侵袭 AC自动机

虽然看明白了KMP和字典树,但是AC自动机还是没怎么理解QAQ... 附上讲解博客Orz:https://blog.youkuaiyun.com/qq_30346729/article/details/78835040                                https://www.cnblogs.com/cjyyb/p/7196308.html 1.HDU2222 Keyword...

A confused programmer 298
上一篇: HDU2222-Keywords Search AC自动机
下一篇: HDU1116-Play On Words 并查集,欧拉回路
P_rogrammer
博客等级 码龄12年 0粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值