HDU 2896 病毒侵袭 AC自动机

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 当太阳的光辉逐渐被月亮遮蔽,世界失去了光 阅读详情
思路:对每个字符串在Trie树上找一遍即可。
注意:理论应该有10w个节点,但是10w个MLE了,所以开8w也能过。

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

/*********************************************
    Problem : HDU 2896
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = (a) ; i <= (b) ; i ++) //遍历
#define rrep(i,a,b) for(int i = (b) ; i >= (a) ; i --) //反向遍历
#define repS(it,p) for(auto it = p.begin() ; it != p.end() ; it ++) //遍历一个STL容器
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next) //遍历u所连接的点
#define cls(a,x)   memset(a,x,sizeof(a))
#define eps 1e-8

using namespace std;

const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;

typedef long long LL;
typedef unsigned long long ULL;

int T,n,m,k;

int fx[] = {0,1,-1,0,0};
int fy[] = {0,0,0,-1,1};

const int MAXN = 80005;
const int MAX_SIZE = 95;
int tot ; 
char s[10005];
int virus[4];//需要输出病毒的编号
int recv[4];

class AC_automation {
private:   
    struct Node {
        int next[MAX_SIZE]; //节点的儿子
        int stat ; //有几个字符是以当前节点结尾的
    }t[MAXN]; //Trie 树上的节点
    int fail[MAXN]; //失配指针

public:    
    void init() {
        tot = 1; cls(t,0); cls(fail,0);
    }

    void reset_stat(int len) {
        rep(i,1,len) t[recv[i]].stat = virus[i]; 
    }

    void insert(char * str,int idx) {
        int len = strlen(str) - 1;
        rep(i,0,len) str[i] -= ' ';//ascii 表可见字符,所以减掉一个空格
        int pre = 0 , nxt = 0 ;
        rep(i,0,len) {
            nxt = t[pre].next[str[i]];
            if(nxt == 0) {
                t[pre].next[str[i]] = tot ;
                nxt = tot ++;
            }
            pre = nxt;
            //printf("%d -> ",nxt);
        }
        //puts("");
        t[nxt].stat = idx; //给每个字符串编号
    }

    void get_fail() {
        queue<int>q;
        q.push(0);
        while(!q.empty()) {
            int u = q.front();
            rep(i,0,MAX_SIZE-1) {
                if(t[u].next[i]) {
                    q.push(t[u].next[i]);
                    int tmp = u;
                    while(fail[tmp]) {
                        if(t[fail[tmp]].next[i]) {
                            fail[t[u].next[i]] = t[fail[tmp]].next[i]; break;
                        }
                        tmp = fail[tmp];
                    } 
                    if(u != 0 && !fail[t[u].next[i]]) {//处理fail[tmp] = 0 时的情况
                        if(t[0].next[i]) fail[t[u].next[i]] = t[0].next[i];
                    }
                }
            }
            q.pop();
        }
        //rep(i,1,tot-1) printf("%d %d %d\n",i,fail[i],t[i].stat);  
    }

    int query(char * str) {
        int idx = 0;
        int len = strlen(str) - 1;
        rep(i,0,len) str[i] -= ' ';
        int now = 0;
        rep(i,0,len) {
            while(now && (!t[now].next[str[i]])) now = fail[now];
            now = t[now].next[str[i]];
            int tmp = now;
            while(tmp) {
                if(t[tmp].stat) {
                    idx ++ ;
                    virus[idx] = t[tmp].stat;
                    recv[idx] = tmp;
                    t[tmp].stat = 0;
                }               
                tmp = fail[tmp];
            }
        }
        return idx;
    }
};

AC_automation ac;

void input() {
    char str[205];
    ac.init();
    getchar();//读掉一个回车
    rep(i,1,n) {
        gets(str);
        ac.insert(str,i);
    }
    ac.get_fail();
}

void solve() {
    scanf("%d",&m);
    getchar();

    int web_site; //有病毒网站的数目
    int cnt = 0;
    rep(i,1,m) {
        gets(s);
        rep(i,1,3) virus[i] = 0;

        int len = ac.query(s);
        if(len > 0) {
            if(len >= 2) if(virus[1] > virus[2]) {swap(virus[1],virus[2]);swap(recv[1],recv[2]);}
            if(len >= 3) if(virus[2] > virus[3]) {swap(virus[3],virus[2]);swap(recv[3],recv[2]);}
            if(len >= 3) if(virus[1] > virus[2]) {swap(virus[1],virus[2]);swap(recv[1],recv[2]);}
            cnt ++;
            printf("web %d:",i);
            rep(i,1,len) printf(" %d",virus[i]);
            puts("");
        } 
        ac.reset_stat(len);
    }
    printf("total: %d\n",cnt);
}

int main(void) {
    //freopen("a.in","r",stdin);
    while(~scanf("%d",&n)) {
        input();
        solve();
    }
    return 0;
}
避坑!!!Stata双重机器学习(DML)遇到的问题及解决方式 除了上述代码,我还在Anaconda Navigator图形界面来更新conda,更新过的小伙伴应该都知道,这个过程非常漫长,我大概经历了2-3天,在这个过程中电脑一直运行,但是很不幸,无论哪种方式,最终都没有更新到最新版本。安装成功之后,我抱着试一试的心态再次在stata18MP中运行,没有想到,这次竟然运行成功了!我之前一直用的是stata17MP版本,在运行DML的时候,代码一直出错,我以为是python路径没有设置好的原因,就各种在python上面下功夫,经过各种查找后,确定DML必须要在。 阅读详情

相关推荐

从法律文档到知识图谱

这里我们定义了两个 Pydantic 模型:Location 用于捕捉结构化的地址信息,包含可选的国家、州和地址字段;Party 用于表示合同参与方,包含必填的名称和可选的位置详情。字段描述通过告知 LLM 每个字段具体需要查找哪些信息,来辅助提取过程。"""包含结构化地址组件的位置信息。"""country: Optional[str] = Field(None, description="国家")

Anspire的博客 3030

hdu 2896 病毒侵袭 ac自动机

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

aipiannian6725的博客 208

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 518

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

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

Sly_461的博客 828

【新手流程】1小时解决Anaconda+Cuda+Cudnn+Pytorch+Pycharm深度学习环境配置

一小时速通Anaconda+Cuda+Cudnn+Pytorch+Pycharm环境配置

m0_57190453的博客 4086

5G协议栈逆向工程:基于开源模拟器的核心网信令分析实战

本文详细介绍了基于开源模拟器Free5GC和UERANSIM的5G协议栈逆向工程实战,涵盖核心网信令分析、环境搭建、认证协议解析及安全漏洞验证。通过NGAP/NAS信令交互解密和异常流量注入测试,帮助研究人员深入理解5G网络安全机制,并提供实用的安全加固建议。

weixin_29250573的博客 674

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

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

weixin_30251587的博客 90

Zigbee开发环境搭建:从驱动安装到程序烧录全指南

本文提供了一份详尽的Zigbee开发环境搭建全指南,涵盖从驱动安装到程序烧录的完整流程。重点介绍了使用SmartRF Flash Programmer和仿真器进行程序下载的关键步骤,并详细说明了USB转串口驱动的配置方法,帮助开发者快速构建稳定的Zigbee开发基础。

weixin_29195217的博客 393

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

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

嗯。 988

【CANoe】CANoe的 I/O功能-以VN1640A为例

Canoe的 I/O功能-以VN1640A为例

星Yeah 的博客 7870

使用Python的OpenCV库进行三维重建点云

通过这些步骤,我们可以使用Python的OpenCV库进行三维重建,并生成对应的点云。当然,这只是一个简单的示例,实际的三维重建可能涉及更多的图像处理和计算步骤。在计算机视觉领域,三维重建是一项重要的任务,它可以将多个二维图像或视频序列转换为三维场景模型。在本文中,我们将介绍如何使用Python的OpenCV库进行三维重建,并生成相应的点云。以上是使用Python的OpenCV库进行三维重建点云的简要介绍和示例代码。最后,我们可以将计算得到的三维点云可视化。安装完成后,我们可以开始编写代码。

AuSwift的博客 1646

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

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

code 1160

PDD psnl_verification anti_content 生成顺序与环境校验说明

K不是明文 URL,而是从当前href再派生出来的一小段摘要值。页面 URL 变,K会跟着变但K不是直接肉眼可读的 URL 字串可以把它理解成“URL 的短摘要字段”。这一步是最容易被误解的地方。它吃进去的是压缩后的中间串不是直接吃环境字段它内部还带有长度预算 / 字符映射 / 位置处理逻辑所以最终看到的环境字段 bytes协议头deflate 压缩自定义编码多层叠加后的结果。先把字段总包做再把压缩结果转成raw再拼fTail最后走做字符级输出因此,当前看到的协议字段流。

码王吴彦祖的博客 68

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

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

yjCola 524

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

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

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

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

snowMyDream's BLOG 1459

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

L_X_ 337

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

病毒侵袭 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自动机

<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

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的博客 119

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

HDU2896 病毒侵袭 AC自动机

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

I'm Growing 573

【HDU2896】病毒侵袭 AC自动机

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

aodanchui1057的博客 115

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

http://acm.hdu.edu.cn/showproblem.php?pid=2896 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11796    Accepted Submission(s): 3067

fcbruce 1140

HDU - 2896 病毒侵袭 AC自动机

题目链接:https://vjudge.net/problem/HDU-2896 题意: Input 第一行,一个整数N(1<=N<=500),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在20—200之间。 每个病毒都有一个编号,依此为1—N。 不同编号的病毒特征码不会相同。 在这之后一行,有一个整数M(1<=M<=1000)...

还我笑颜 280
上一篇: HDU 2222 Keywords Search AC自动机
下一篇: HDU 3065 病毒侵袭持续中 AC自动机
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值