HDU3065 病毒侵袭持续中

分布式定时任务(XXL-JOB)整合达梦数据库 带源码 背景 1. 因公司需要可视化管理配置调度任务,查询项目选择XXL-JOB,它是开源项目,入手很简单,详情可以参考官方文档; 2. 因项目的机密性,选择数据库为国内知名的达梦数据库7,与Java项目的整合详情可以参考SpringBoot 集成 达梦数据库 maven依赖本地jar包; 3. 因XXL-JOB暂时没有找到集成达梦数据库的案例,博主自己整合DM7踩过很多的坑,特此整合一个简单可直接... 阅读详情

前言

最近练习AC自动机,写个题解顺带存作板子。

题目描述

小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家能再帮帮他吗?

Input

第一行,一个整数NN(1≤N≤1000),表示病毒特征码的个数。
接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。
在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。
(PS:有多组数组,出题人压根没提到这点)

分析

对于这道题,我们要统计每种串分别出现的次数,因此在统计时就不必把节点上的val标记抹去,再把答案存到一个cnt数组中就好。

参考程序

// vjudge 244506 B
#include <cstdio>
#include <cstring>
const int MAXN = 1005;

char P[MAXN][55], Source[2000005];
int N, cnt[MAXN];

namespace AC_automaton {
    const int TOT_LEN = 50005;
    int sz, T[TOT_LEN][26], fail[TOT_LEN], end[TOT_LEN];
    // end表示在此结尾的模式串编号,0就是没有
    inline void init() {    // 初始化自动机
        sz = 1, end[0] = 0;
        memset(T[0], 0, sizeof(T[0]));
    }
    void insert_pattern(const char * st, int id);   // 插入模式串
    void construct();   // 构造自动机
    void match(const char * st);    // 匹配
}
void solve();

int main() {
    while (scanf("%d", &N) == 1 && N) solve();
    return 0;
}

void solve() {
    AC_automaton::init();
    for (int i = 1; i <= N; i++) {
        scanf("%s", P[i]);
        AC_automaton::insert_pattern(P[i], i);
    }
    AC_automaton::construct();  // 一开始没写构造函数居然过了样例???惊奇!
    scanf("%s", Source);
    AC_automaton::match(Source);
}

namespace AC_automaton {
    void insert_pattern(const char * st, int id) {
        int rt = 0;
        for (int i = 0, ch; st[i]; rt = T[rt][ch], ++i)
            if (!T[rt][ch = st[i] - 'A']) end[sz] = 0, memset(T[sz], 0, sizeof(T[sz])), T[rt][ch] = sz++;
        end[rt] = id;
    }

    int Que[TOT_LEN];
    void construct() {
        int i, hd = 0, tl = 0;
        for (i = 0; i < 26; i++)
            if (T[0][i]) Que[tl++] = T[0][i], fail[T[0][i]] = 0;
        while (hd < tl) {
            int rt = Que[hd++];
            for (i = 0; i < 26; i++) {
                int & now = T[rt][i];
                if (now) fail[now] = T[fail[rt]][i], Que[tl++] = now;
                else now = T[fail[rt]][i];
            }
        }
    }

    void match(const char * st) {
        memset(cnt, 0, sizeof(cnt));
        for (int i = 0, rt = 0; st[i]; ++i)
            if (st[i] < 'A' || st[i] > 'Z') rt = 0;     // 注意会有非法字符出现,这时候一定是失配,直接回到根节点
            else for (int now = rt = T[rt][st[i] - 'A']; now; now = fail[now]) ++cnt[end[now]];
        for (int i = 1; i <= N; i++)
            if (cnt[i]) printf("%s: %d\n", P[i], cnt[i]);
    }
}
osgEarth实战:5分钟搞定3DTiles模型加载(附完整配置代码) 本文提供了一份osgEarth加载3DTiles模型的实战指南。通过详解核心Earth文件配置与精简的C++集成代码,帮助开发者快速在三维地球场景中集成倾斜摄影与BIM等海量模型,并分享了性能调优与常见问题排查技巧,有效提升开发效率。 阅读详情

相关推荐

宇树机器狗go2—slam建图(1)点云格式

上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目来进行不定期更新,仿真不只限于在gazebo上实现,后面还会在isaac sim等仿真平台上教大家如何搭建,其目的还是帮助各位都能以较低的成本加入到宇树机器狗go2的学习中。

古月居 3271

AC自动机实现

程序功能 求文本串中出现了多少模式串[链接](http://acm.hdu.edu.cn/showproblem.php?pid=2222) #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std;const int maxk

liuzhan214的博客 363

【亲测】ubuntu20.4 安装CUDA11.8

一步一步搭建C++ CUDA CUDNN TENSORRT OPENCV DNN ONNXRUNTIME推理环境

weixin_40950590的博客 3894

hdu3065 病毒侵袭持续中(AC自动机,统计每个字符串出现的次数)

题目链接:点击打开链接 题意描述:给一些字符串和一个文本,统计每个字符串在文本中出现的次数? 解题思路:很简单的AC自动机 代码: #include #include #include #define MAXN 60000 using namespace std; int ans[1010]; struct Trie{ int next1[MAXN][26],fail[MAX

Crazy_Bear 1058

Ubuntu新手必看:3种方法快速查看和编辑JSON文件(附jq安装指南)

本文为Ubuntu新手详细介绍了三种查看和编辑JSON文件的核心方法:命令行利器jq、灵活脚本Python以及直观的图形化编辑器(如VS Code)。文章重点解析了jq的安装与核心用法,并对比了各方案的优缺点,帮助用户根据快速查询、复杂处理或直观编辑等不同场景,选择最合适的工具,从而高效处理JSON数据。

weixin_29229989的博客 416

VS2015+Qt+OpenCV+open62541开发过程(05_VS2015中使用OPCUA open62541通过Kepware读写PLC数据)

此外还需要所需lib包:WS2_32.Lib(opcua通讯用到的库,opcua使用socket通讯,需使用此库),添加#pragma comment(lib,"ws2_32.lib") 语句,有的文章说需要添加ws2_32.lib文件或ws2_32.dll到项目资源中,貌似影响不大。2.在VS中选择x64平台会报错,选择x86平台可以用,应该是ws2_32.lib相关的库不支持64位,目前没有解决,继续后面的实验,看看用Qt后是否可以解决。6.VS中建立的变量,与读取的OPC点数据类型注意对应。

zzh17的博客 1862

AC多模匹配算法

总结:AC算法的核心是三张查找表:goto、failure和output,共包含四种具体的算法,分别是计算三张查找表的算法以及AC算法本身。可以先阅读博客(http://tech.meituan.com/ac.html)了解goto表、failure表。 下述文章(http://blog.youkuaiyun.com/myjoying/article/details/7960534)博客转发。早在1975年贝

《我是你的正能量》 2661

STM32掉电保存配置参数技巧

本文介绍了使用STM32内置备份寄存器(BKP)实现掉电保存配置参数的方法。相比外接EEPROM或Flash,备份寄存器无需外设但存储容量有限,需通过VBAT引脚连接纽扣电池供电。文章详细说明了初始化步骤,包括使能PWR时钟、允许访问备份寄存器等操作,并提供了RTC初始化的代码示例。同时介绍了HAL库中读写备份寄存器的函数使用方法,包括HAL_RTCEx_BKUPWrite和HAL_RTCEx_BKUPRead函数的具体参数和调用示例。该方法适用于需要小容量数据掉电保存的应用场景。

hanhanhan233的博客 946

【AC自动机_每个模式串在文本串中出现的次数】HDU 3065 病毒侵袭持续中

HDU 3065 病毒侵袭持续中 题意:给出n个全是英文大写字母的模式串,保证每个模式串不完全相同。然后再给出一个文本串,字符集由包含ASCII可见字符组成。问每个模式串在文本串中出现的次数。 一: 思路:其实就是一个AC自动机的板子???只是分别统计了每个模式串出现的次数而已???真的是这样!!!!!我真的迷…… #include <iostream> #include...

L_X_ 364

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法

本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。

weixin_29189003的博客 407

Oracle 11g安装教程(保姆级超详细安装教程)

Oracle详细安装步骤,每一步都配有图例引导 ORACLE是数据库(Oracle服务端)。是连接数据库的客户端(Oracle客户端)。是连接oracle的可视化客户端软件。

2302_81846649的博客 1万+

HDU 3065 病毒侵袭持续中

HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Problem Description - 题目描述 小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大...

122

【C#程序员入门AI】必知的一些知识

2026年C#调用AI,核心就4个概念+3种方式4个概念:大模型(大脑)、嵌入(数字密码)、向量(载体)、Agent(超级助理)3种方式:云端API(快)、本地模型(隐私)、混合部署(最佳)不用怕复杂,跟着这个思路走,你就能从“AI小白”变成“C# AI开发能手”,把AI集成到你的.NET项目里,提升效率、创造价值!

人工智能AI技术 409

AC自动机入门 - HDU3065 病毒侵袭持续中

AC自动机的模板题。 HDU3065 病毒侵袭持续中 题意:给定n个字符串和一段文本,统计每个字符串在文本中分别出现的次数。 注意点:这里输入单词的时候给每个单词分布一个id,然后在统计次数的时候根据id增加数组的次数就可以了。(这里用kuangbin大神的模板) code: #include #include #include #include using namespa

Exchan 384

WINCC7.3破解文件

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

hdu3065 病毒侵袭持续中

病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2876    Accepted Submission(s): 1056 Problem Description 小t非常感谢大家帮忙解决了他的上一个

喵呜的Blog 976

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU3065 病毒侵袭持续中

小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家...

weixin_44488944的博客 183

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[题解]HDU2896病毒侵袭、HDU3065病毒侵袭持续中

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

Saramanda的博客 913

HDU 3065 病毒侵袭持续中(AC自动机)

<br />/* FileName: 3065.cpp Author: ACb0y Date: 2010年12月30日12:45:12 Type: AC自动机 ProblemID: HDU 3065 病毒侵袭持续中 Result: 3372006 2010-12-30 12:41:42 Accepted 3065 281MS 16760K 2218 B G++ ACb0y */ #include <iostream> #include <queue> using name

个人独立博客http://www.acb0y.cn/ 1123

HDU - 3065 病毒侵袭持续中

小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家...

yhb的博客 217

HDU3065 病毒侵袭持续中【AC自动机】

HDU3065 病毒侵袭持续中 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,...

Dream_maker的博客 273

病毒侵袭持续中 hdu3065

题目链接 这道题与hdu2222类似 #include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; #include&lt;math.h&gt; #include&lt;new&gt; #include&lt;queue&gt; #include&lt;string.h&gt; #include&lt;

qq_41006240的博客 137

HDU 3065:病毒侵袭持续中

AC自动机入门题

温姑娘的博客 325

病毒侵袭持续中(HDU-3065)

Problem Description 小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包...

Alex_McAvoy的博客 717

【hdu3065】病毒侵袭持续中

题意: 求目标串中每个模式串出现几次 目标串长度<=2000000 模式串<=1000个 模式串长度<=50 题解: 这不就是AC自动机的模板题吗! 求fail树中模式串的子树中有几个是目标串的节点就完了- - 但是 这样做不是太没意思了 (← ←...) 昨天晚上听说后缀数组好像可以完美替代AC自动机(事实上是不行的) 于是就拿出了这道题 ...

dee2784的博客 160
上一篇: TC SRM567 DIV2 T3 MountainsEasy
下一篇: XJOI 2018提高组训训练15 @2018-08-13 总结
「已注销」
博客等级 码龄9年 13粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值