hdu 2896 病毒侵袭

http://acm.hdu.edu.cn/showproblem.php?pid=2896

  AC自动机的简单题。。。忘记关debug了,wa了一次。。。囧!

View Code
  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4 #include <set>
  5 #include <cstdlib>
  6 
  7 using namespace std;
  8 
  9 const int kind = 128;
 10 const int maxn = 201 * 501;
 11 
 12 struct Node{
 13     int fail;
 14     int next[kind];
 15     int count;
 16     void init(){
 17         fail = -1;
 18         count = 0;
 19         memset(next, -1, sizeof(next));
 20     }
 21 }node[maxn];
 22 
 23 char keyword[201];
 24 char str[10001];
 25 int head, tail, nodeUsed;
 26 int q[maxn];
 27 
 28 void insert(char *s, int root, int num){
 29     int p = root;
 30     int i = 0, index;
 31 
 32     while (s[i]){
 33         index = s[i] - 33;
 34         if (node[p].next[index] == -1){
 35             node[p].next[index] = nodeUsed;
 36             node[nodeUsed].init();
 37             nodeUsed++;
 38         }
 39         p = node[p].next[index];
 40         i++;
 41     }
 42     node[p].count = num;
 43 }
 44 
 45 void build(int root){
 46     int i;
 47 
 48     node[root].fail = -1;
 49     head = tail = 0;
 50     q[head++] = root;
 51     while (head != tail){
 52         int temp = q[tail++];
 53         int p = -1;
 54 
 55         for (i = 0; i < kind; i++){
 56             if (node[temp].next[i] != -1){
 57                 if (temp == root) node[node[temp].next[i]].fail = root;
 58                 else{
 59                     p = node[temp].fail;
 60                     while (p != -1){
 61                         if (node[p].next[i] != -1){
 62                             node[node[temp].next[i]].fail = node[p].next[i];
 63                             break;
 64                         }
 65                         p = node[p].fail;
 66                     }
 67                     if (p == -1) node[node[temp].next[i]].fail = root;
 68                 }
 69                 q[head++] = node[temp].next[i];
 70             }
 71         }
 72     }
 73 }
 74 
 75 set<int> virus;
 76 
 77 void query(int root){
 78     int i = 0, index;
 79     int p = root;
 80 
 81     virus.clear();
 82     while (str[i]){
 83         index = str[i] - 33;
 84         while (node[p].next[index] == -1 && p != root) p = node[p].fail;
 85         p = node[p].next[index];
 86         p = (p == -1) ? root : p;
 87 
 88         if (node[p].count) virus.insert(node[p].count);
 89         i++;
 90     }
 91 }
 92 
 93 void traverse(int root){
 94     if (root == -1) return ;
 95     printf("root %d\n", root);
 96     printf("fail %d\n", node[root].fail);
 97     printf("count %d\n", node[root].count);
 98     for (int i = 0; i < kind; i++){
 99         if (node[root].next[i] == -1) continue;
100         printf("%c %d\n", i + 'a', node[root].next[i]);
101     }
102     puts("");
103     for (int i = 0; i < kind; i++){
104         traverse(node[root].next[i]);
105     }
106 }
107 
108 int main(){
109     int n;
110 
111 //freopen("in", "r", stdin);
112     while (~scanf("%d", &n)){
113         int root = 0;
114 
115         node[0].init();
116         nodeUsed = 1;
117 
118         for(int i = 1; i <= n; i++){
119             scanf("%s", keyword);
120             insert(keyword, root, i);
121         }
122         build(root);
123 //traverse(root);
124 //puts("Built!");
125         scanf ("%d", &n);
126 
127         int cnt = 0;
128 
129         for (int i = 1; i <= n; i++){
130             scanf("%s", str);
131             query(root);
132 
133             if (virus.size()){
134                 cnt++;
135                 printf("web %d:", i);
136                 for (set<int>::iterator ii = virus.begin(); ii != virus.end(); ii++){
137                     printf(" %d", *ii);
138                 }
139                 puts("");
140             }
141         }
142         printf("total: %d\n", cnt);
143     }
144 
145     return 0;
146 }

 

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/archive/2012/09/19/hdu_2896_Lyon.html

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

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

相关文章

一件有趣的事:我用 Python 爬了爬自己的微信朋友

全世界只有3.14 % 的人关注了数据与算法之美最近几天干啥都不来劲&#xff0c;昨晚偶然了解到Python里的itchat包&#xff0c;它已经完成了wechat的个人账号API接口&#xff0c;使爬取个人微信信息更加方便。鉴于自己很早之前就想知道诸如自己微信好友性别比例都来自哪个城市之…

ML.NET Cookbook:(4)如何调试实验或预览管道?

大多数ML.NET数据操作都是延迟执行的&#xff1a;声明时&#xff0c;操作符不会立即处理数据&#xff0c;而是验证该操作是否可行。执行被推迟到实际请求输出数据为止。这意味着架构不匹配将在声明时抛出&#xff0c;但是直到执行时才抛出数据错误。延迟计算是数据库系统的一种…

数学本是非常有趣的,只是教科书呈现的方式太死板

数学是基础学科&#xff0c;是打开科学大门的钥匙。数学能力决定着一个人的科技创新能力&#xff0c;而科技创新能力决定着一个孩子未来的竞争力。数学也是一门不断累积的学问&#xff0c;学习数学也是一个渐进的过程&#xff0c;要是基础的概念不理解&#xff0c;基础学习得不…

oracle期间平均成本,小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(四)制造费用设置及成本计算...

在上两篇文章中介绍了资源的设置及其成本计算&#xff0c;本篇文章将介绍与资源关联非常紧密的制造费用的设置及成本计算。1. 制造费用设置图 1. 制造费用主设置界面制造费用主设置界面如图1所示&#xff0c;成本要素选择”制造费用”&#xff0c;并设置制造费用的名称、说明、…

通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...

多运行时是一个非常新的概念。在 2020 年&#xff0c;Bilgin Ibryam 提出了 Multi-Runtime&#xff08;多运行时&#xff09;的理念&#xff0c;对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华。那到底什么是多运行时呢&#xff1f;首先还是得从分布式应用的四大类…

如何把文件压缩变成一张图片?

全世界只有3.14 % 的人关注了数据与算法之美先准备好三个文件。图片、压缩包、批处理文件。然后编辑bat文件。压缩命令代码是&#xff1a;copy /b 图片.jpg压缩包.rar 最后输出文件名.jpg例如&#xff1a;copy /b A.jpgtest.rar B.jpg 注意空格。保存之后执行bat批处理文件。执…

.NET程序崩溃了怎么抓 Dump ? 我总结了三种方案

一&#xff1a;背景 1. 讲故事最近几天接到了几个crash的求助&#xff0c;可能这几个朋友没玩过怎么去生成dump&#xff0c;只能手把手教&#xff0c;感觉也不是一个办法&#xff0c;所以有必要总结一下&#xff0c;后续再有朋友咨询的话&#xff0c;我就可以把这篇文章丢过去了…

敏捷软件开发之结对编程

2019独角兽企业重金招聘Python工程师标准>>> 说明 【作为推荐的最佳实践&#xff0c;结对编程早已为人们熟知&#xff0c;并且也是所有XP实践中争议最大的一个】 结对编程技术是一个非常简单和直观的概念&#xff1a;两位程序员肩并肩地坐在同一台电脑前合作完成同一…

Build 2021 :正式发布.NET 6 Preview4

微软在不断推进.NET 6的可用性&#xff0c;昨晚的Build 2021大会上发布了Preview4&#xff0c; 这是一个很大的版本更新&#xff0c;带来大量的功能&#xff0c;以及接近最终的产品交付质量&#xff0c;不过&#xff0c;这并不意味着可以在生产环境使用了&#xff0c;正式发布R…

程序员与代码的几种关系,每种都会被我们鄙视

全世界只有3.14 % 的人关注了数据与算法之美程序员很大部分时间都在和代码打交道&#xff0c;所以程序员和代码之间的关系&#xff0c;在很多常人看来&#xff0c;是无法理解的&#xff0c;下面我们就来聊聊。找到你仅仅是为了将你消灭掉在程序员的世界里面&#xff0c;一个词语…

.NET 6 Preview 4 已发布,ASP.NET Core 更新内容

原文&#xff1a;bit.ly/3wFqDy9作者&#xff1a;Daniel译者&#xff1a;王亮.NET 6 预览版 4 现已发布&#xff0c;其中包括对 ASP.NET Core 的许多新改进。下面是此次预览版中 ASP.NET Core 的更新内容&#xff1a;引入最小 API异步流HTTP 日志中间件新项目中使用 Kestrel 作…

linux 装nano命令,linux下安装 nano 如果没有这个命令的话~~可以看下

首先查看下这个目录里有没有Centos-Base.repo这个文件(附件里有这个)然后用Xmanager下的xftp 把本机上的这个文件复制到虚拟机中的/目录下[rootfox ~]#mv Centos-Base.repo /etc/yum.repos.d/[rootfox ~]# cd /etc/yum.repos.d/[rootfox yum.repos.d]# lsCentos-Base.repo Cen…

struts2对action的指定方法进行校验

2019独角兽企业重金招聘Python工程师标准>>> 在strust2中&#xff0c;我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。 一、对于输入校验struts2提供了两种实现方法&#xff1a; 1、采用手工编写代码实现。 &#xff08;1&#xff09;通过…

EFCore之命令行工具

介绍EFCore工具可帮助完成设计数据库时候的开发任务&#xff0c;主要用于通过对数据库架构进行反向工程来管理迁移和搭建DbContext和实体类型。EFCore .NET命令行工具是对跨平台.NET Core CLI工具的扩展&#xff0c;该工具执行需要具有.NET Core SDK(具有 Sdk"Microsoft.N…

想让数据分析更简便,怎能少了它!

R作为一种统计分析软件&#xff0c;广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;是目前主流数据应用软件之一。为了更好地帮助大家了解并快速入门R语言&#xff0c;现超级数学建模携手柯老师以R语言为基础&#xff0c;向大家隆重推出《R语言基础》系列课。柯老…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测分类效果基本描述程序设计参考…

Akka2使用探索3(Duration 和 Deadline)

2019独角兽企业重金招聘Python工程师标准>>> akka提供了两个关于时长的数据类型&#xff1a;Duration 和 Deadline&#xff0c;比如5秒钟这种含义。 Duration.Inf表示无限&#xff0c;Duration.MinusInf表示负无限 Deadline, 表示一个绝对的时间点&#xff0c;意义是…

C#垃圾回收机制(GC)

GC的前世与今生虽然本文是以.net作为目标来讲述GC&#xff0c;但是GC的概念并非才诞生不久。早在1958年&#xff0c;由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能&#xff0c;这是GC的第一次出现。Lisp的程序员认为内存管理太重要了&#xff0c;所…

收藏 | EXCEL的36个逆天功能,动画教程

全世界只有3.14 % 的人关注了数据与算法之美1、添加文字下面线条的2种方法2、设置列宽的3种方法3、以cm为单位设置行高跟列宽4、输入0开头数字的2种方法5、快速输入当天日期与时间6、如何输入分数&#xff1f;7、生成序列的3种方法8、快速录入相同内容9、隐藏没有数据区域10、填…

读《中台架构与实现》

最早是在极客时间知道欧创新老师的&#xff0c;我也是他的课程《DDD实战课》的订阅者&#xff0c;后来欧老师基于这门课程做更多的实践与思考&#xff0c;完成了《中台架构与实现&#xff1a;基于 DDD 和微服务》这本书的写作&#xff0c;最近刚好读完了这本书。中台、微服务、…