【HDU2896】病毒侵袭——ac自动机

 

网上很多代码都略显繁琐,看了一下yy dalao的代码感觉很好,但他懒得打题解(好吧我也是

以0为根节点的话,我把yy的一段代码删了改用fail[c]=x==0?0:ch[fail[x]][i];来实现特判,效果还不错!
也算是AC自动机的模版题吧,用了一个id数组来储藏每一个特征码的最后一个字符所在位置,再用vis来看网站源码中有哪条特征码(即哪条特征码的id被访问到)

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 char s[205],t[10005];
 5 int fail[100001],q[100002],ch[100002][130],val[100002],id[505],vis[100002];
 6 int sz=0,ans=0,n;
 7 void trie(int x)
 8 {
 9     int u=0,m=strlen(s);
10     for(int i=0;i<m;i++)
11     {
12         int c=s[i];
13         if(!ch[u][c])
14         ch[u][c]=++sz;    
15         u=ch[u][c];
16     }
17     id[x]=u;
18     val[u]++;
19 }
20 void makefail()
21 {
22     int head=0,tail=1;
23     q[1]=0;fail[0]=0;
24     while(head!=tail)
25     {
26         int x=q[++head];if(head>=100000)head=0;
27         for(int i=0;i<128;i++){
28             int c=ch[x][i];
29             if(!c){ch[x][i]=ch[fail[x]][i];continue;}
30             q[++tail]=c;if(tail>=100000)tail=0;
31             fail[c]=x==0?0:ch[fail[x]][i];
32         }
33     }
34 }
35 void ac(int x)
36 {
37     int f=0,k=0,len=strlen(t);
38     memset(vis,0,sizeof(vis));
39     for(int i=0;i<len;i++){
40         int u=t[i];
41         k=ch[k][u];
42         for(int j=k;j;j=fail[j]){if(val[j]){f=1;vis[j]=1;}}
43     }
44     if(!f)return;
45     ans++;printf("web %d:",x);
46     for(int i=1;i<=n;i++)
47         if(vis[id[i]])printf(" %d",i);
48     printf("\n");
49 }
50 int main()
51 {
52     int m;
53     scanf("%d",&n);
54     for(int i=1;i<=n;i++){
55         scanf("%s",s);
56         trie(i);
57     }
58     makefail();
59     scanf("%d",&m);
60     for(int i=1;i<=m;i++)
61     {
62         scanf("%s",t);
63         ac(i);
64     }
65     printf("total: %d\n",ans);
66     return 0;
67 }
hdu2896

 

转载于:https://www.cnblogs.com/JKAI/p/6914583.html

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

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

相关文章

经典 HTML5 Javascript 俄罗斯方块游戏

Blockrain.js 是一个使用 HTML5 & JavaScript 开发的经典俄罗斯方块游戏。只需要复制和粘贴一段代码就可以玩起来了。最重要的是&#xff0c;它是响应式的&#xff0c;无论你的显示屏多么宽都能自动匹配。你可以自定义你想要的颜色以适应您的网站&#xff0c;也可以调整方块…

【电赛PID半天入门】从接触编码器到调出好康的PID波形

从接触编码器到调出好康的PID波形认识电机及编码器只需动动手指&#xff0c;就能让STM32得到电机转过的角度让电机转起来认识PID控制①比例调节器②积分调节③微分调节④比例积分微分调节数字PID调节器&#xff08;1&#xff09;数字PID位置型控制算法&#xff08;2&#xff09…

算法的复杂度分析

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

PHP面向对象 封装与继承

知识点&#xff1a; PHP封装三个关键词&#xff1a; 一、public 公有的&#xff0c;被public修饰的属性和方法&#xff0c;对象可以任意访问和调用 二、private 私有的&#xff0c;被private修饰的属性和方法&#xff0c;只能在类内部的方法可以进行调用&#xff0c;或者被子类…

POJ 1380 坐标旋转

题意&#xff1a; 问第二个矩形能不能放进第一个矩形中。 题解&#xff1a; 暴力旋转第二个矩形&#xff0c;判断左右、上下是否同时小于第一个矩形 当然&#xff0c;数学推导也可以&#xff0c;挺简单的相似神马的胡搞就行~ View Code 1 #include <iostream>2 #include…

冲刺省选习题集

1.火柴棒等式 单击此处看题目 考察算法&#xff1a;数学分析枚举 1 #include <iostream>2 #include <cstdio>3 using namespace std;4 5 const int match[10]{6,2,5,5,4,5,6,3,7,6};6 7 int n;8 9 int merge(int x){ 10 int sum0; 11 if(x0)return 6; 12 …

MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

目录一、新建工程二、时钟树时钟系统结构时钟系统的原理时钟树配置实战三、点灯工程师封装好的初始化函数平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、新建工程 二、时钟树 时钟系统结构 &#xff08;1&…

解决maven依赖冲突,这篇就够了!

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

SOAP 1.1 - 学习

SOAP 1.1 --- 每天发送SOAP request&#xff0c;不搞明白啥叫SOAP,惭愧 SOAP 1.1 XML 架构定义 <xs:schema xmlns:xs"http://www.w3.org/2001/XMLSchema" xmlns:tns"http://schemas.xmlsoap.org/soap/envelope/" targetNamespace"h…

Codeforces Round #168 (Div. 2)---A. Lights Out

Lights Outtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputLenny is playing a game on a 3  3 grid of lights. In the beginning of the game all lights are switched on. Pressing any of the lights will tog…

【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

hiho模拟面试题2 补提交卡 (贪心,枚举)

题目&#xff1a; 时间限制:2000ms单点时限:1000ms内存限制:256MB描写叙述 小Ho给自己定了一个雄伟的目标&#xff1a;连续100天每天坚持在hihoCoder上提交一个程序。100天过去了。小Ho查看自己的提交记录发现有N天由于贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi歧视的眼神…

libcurl上传文件

libcurl参数很多&#xff0c;一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题&#xff1a;libcurl断点下载>> 这里主要汇总一下&#xff0c;libcurl上传的二种方式&#xff1a; 1、直接上传文件&#xff0c;类似form表单<input type”file” />&#xff0c;…

MSP430F5529 DriverLib 库函数学习笔记(二)GPIO

目录硬知识一、MSP430单片机端口概述二、通用IO端口输出特性三、端口P1和P21&#xff0e;输入寄存器PxIN2&#xff0e;输出寄存器PxOUT3&#xff0e;方向寄存器PxDIR4&#xff0e;上拉/下拉电阻使能寄存器PxREN5&#xff0e;输出驱动能力调节寄存器PxDS6&#xff0e;功能选择寄…

IOS项目中加入Google Admob SDK

错误1. Undefined symbols for architecture i386: "_OBJC_CLASS_$_ASIdentifierManager", referenced from: objc-class-ref in libGoogleAdMobAds.a(GADIdentifierUtilities.o) "_OBJC_CLASS_$_SKStoreProductViewController", referenced from: …

【RocketMQ】MQ消息发送

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

MSP430F5529 DriverLib 库函数学习笔记(三)认识中断

目录一、硬知识中断的基本概念MSP430单片机中断源中断响应过程中断返回过程中断嵌套二、msp430f5529.h中所列的中断向量宏定义平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、硬知识 中断的基本概念 中断…

推荐系统相关算法

摘要&#xff1a; 热门推荐 协同过滤算法 矩阵分解 基于内容的推荐&#xff08;文本&#xff0c;标签&#xff0c;特征/profile&#xff09; 基于图的算法 内容&#xff1a; 热门推荐&#xff1a; 热门推荐本质上是一个排行榜&#xff0c;可能会考虑到时间衰减&#xff0c;商品…

冒泡排序的简单理解

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

微软职位内部推荐-Software Engineer II

微软近期Open的职位:Job Title: Software Engineer IIWork Location: Suzhou/Beijing, ChinaJob Description:Are you looking for a big challenge? Do you know why Big Data is the next frontier for innovation, competition and productivity? Come join us to build i…