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

news/2024/8/26 4:24:39

病毒侵袭

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 28243    Accepted Submission(s): 6538


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
 

 

Source
2009 Multi-University Training Contest 10 - Host by NIT
 

 

Recommend
gaojie   |   We have carefully selected several similar problems for you:   3065  2243  2825  3341  3247 
 
这个垃圾题目搞了老子半天都说是访问越界,去你妈的访问越界,老子写个AC自动姬容易么我,真是……反正我是半点问题都没看出来
  1 #include "bits/stdc++.h"
  2 using namespace std;
  3 typedef long long LL;
  4 const int MAX1=100005;
  5 const int MAX2=10004;
  6 int n,m;
  7 bool t[505],flag;
  8 struct Aho{
  9     struct Trie{
 10         int next[26];
 11         int cnt,fail;
 12     }sst[MAX1];
 13     
 14     queue <int> q;
 15     int size,tot;
 16     
 17     void init(){
 18         int i,j;
 19         while (q.size()) q.pop();
 20         for (i=0;i<MAX1;i++){
 21             memset(sst[i].next,0,sizeof(sst[i].next));
 22             sst[i].cnt=sst[i].fail=0;
 23         }
 24         tot=size=0;
 25     }
 26     
 27     void insert(char *s){
 28         int i,j,ls=strlen(s);
 29         int now=0;
 30         for (i=0;i<ls;i++){
 31             char c=s[i];
 32             if (!sst[now].next[c-'a']) sst[now].next[c-'a']=++size;
 33             now=sst[now].next[c-'a'];
 34         }
 35         sst[now].cnt=++tot;
 36     }
 37     
 38     void build(){
 39         int i,j;
 40         sst[0].fail=-1;
 41         q.push(0);
 42         while (q.size()){
 43             int u=q.front();
 44             q.pop();
 45             for (i=0;i<26;i++){
 46                 if (sst[u].next[i]){
 47                     if (u==0) sst[sst[u].next[i]].fail=0;
 48                     else{
 49                         int v=sst[u].fail;
 50                         while (v!=-1){
 51                             if (sst[v].next[i]){
 52                                 sst[sst[u].next[i]].fail=sst[v].next[i];
 53                                 break;
 54                             }
 55                             v=sst[v].fail;
 56                         }
 57                         if (v==-1) sst[sst[u].next[i]].fail=0;
 58                     }
 59                     q.push(sst[u].next[i]);
 60                 }
 61             }
 62         }
 63     }
 64     
 65     void search(char *s){
 66         int i,j,ls=strlen(s);
 67         int now=0;
 68         for (i=0;i<ls;i++){
 69             char c=s[i];
 70             if (sst[now].next[c-'a']) now=sst[now].next[c-'a'];
 71             else{
 72                 int p=sst[now].fail;
 73                 while (p!=-1 && !sst[p].next[c-'a']) p=sst[p].fail;
 74                 if (p==-1) now=0;
 75                 else now=sst[p].next[c-'a'];
 76             }
 77             if (sst[now].cnt){
 78                 t[sst[now].cnt]=true;
 79                 flag=true;
 80             }
 81         }
 82     }
 83 }aho;
 84 int main(){
 85     freopen ("virus.in","r",stdin);
 86     freopen ("virus.out","w",stdout);
 87     int i,j,tol=0;
 88     char s[MAX2];
 89     scanf("%d\n",&n);
 90     aho.init();
 91     for (i=1;i<=n;i++){
 92         gets(s);
 93         aho.insert(s);
 94     }
 95     aho.build();
 96     scanf("%d\n",&m);
 97     for (i=1;i<=m;i++){
 98         gets(s);
 99         memset(t,false,sizeof(t));flag=false;
100         aho.search(s);
101         if (flag){
102             printf("web %d: ",i);
103             for (j=1;j<=aho.tot;j++)
104                 if (t[j])
105                     printf("%d ",j);
106                 printf("\n");
107             tol++;
108         }
109     }
110     printf("total: %d",tol);
111     return 0;
112 }

 

转载于:https://www.cnblogs.com/keximeiruguo/p/7342201.html


http://www.niftyadmin.cn/n/1123763.html

相关文章

Aruba无线网络学习(二)

说明&#xff1a;工作过程中接触到了Aruba无线网络设备&#xff0c;并在其网站上下载了技术文档。文档是英文的&#xff0c;看起来有一点费劲。只好一边翻译&#xff0c;一边学习&#xff0c;一边记笔记。水平有限&#xff0c;难免有错误的地方&#xff0c;请大家帮助指正。七、…

四种ABAP数据对象(转)

在ABAP/4中可以使用四种数据对象 1、内部数据对象 创建内部数据对象供在特定的程序中使用&#xff0c;在该程序之外无效&#xff0c;包括文字、常量、变量 &#xff08;1&#xff09;文字 文字是固定值&#xff0c;分为文本文字和数字文字。文本文字是单引号内的字母数字字符序…

Linux速成教程

2019独角兽企业重金招聘Python工程师标准>>> Linux操作系统最为有名的是它对初学者不友好&#xff01;当用户开始接触Linux会感觉到迷惑不解&#xff1a;"Linux凭什么得到广泛应用&#xff0c;还如此声名显赫&#xff1f;" 1.终端和shell 2.常见的使用Lin…

截取与分析日志文件的特定行数的操作

在进行操作系统和数据库系统管理时经常会遇到在日志文件中查找某个字符或者按照时间截取某个时间段的日志进行分析。今天早上就遇到一个MySQL数据库上的问题mysql数据库在0-3点的时候数据库会话连接tpscpu和iowait等都比平时大了许多。为了定位这个时间段内到底发生了那些慢查询…

如何在Linux中查看所有正在运行的进程

你可以使用ps命令。它能显示当前运行中进程的相关信息&#xff0c;包括进程的PID。Linux和UNIX都支持ps命令&#xff0c;显示所有运行中进程的相关信息。ps命令能提供一份当前进程的快照。如果你想状态可以自动刷新&#xff0c;可以使用top命令。 ps命令 输入下面的ps命令&…

WinXP上无法应用WinSrv2008的活动目录组策略的解决办法

去年7月份&#xff0c;做了一次活动目录升级项目&#xff0c;由于他们的环境比较早&#xff0c;两台DC都是Win2000。此次项目的目标就是将域升级到Win2008环境。在项目中碰到诸多困难&#xff0c;最终都一一解决&#xff0c;其中有个之前没有料想到的问题&#xff0c;我觉得有必…

批处理 :windows计划任务;复制;压缩文件夹 备份;

添加windows计划任务&#xff1a; echo off echo 正在启动计划任务服务... sc config Schedule START AUTO >nul sc start Schedule>nul cls SCHTASKS /Create /SC DAILY /TN his_update /TR D:\HYS-HIS\hys-orcl\his_main\his_main.exe /ST 23:23:23 /SD 2012/02/26 >…

Unix常用压缩解压命令

把这些解压命令收集在这里&#xff0c;现用现查&#xff0c;哈哈 .tar 解包&#xff1a; tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是压缩&#xff01;&#xff09;------------------------------…