[HDU2896]病毒侵袭(AC自动机)
题目中文描述,赞!
除了val记录id以外就是模板。
注意:每次数组都要清0.0
——代码
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm> using namespace std; int n, m, sz, tot;
int ch[][], val[], ans[], fail[];
bool vis[];
char s[]; inline void insert(int id)
{
int i, x, now = , len = strlen(s);
for(i = ; i < len; i++)
{
x = s[i];
if(!ch[now][x]) ch[now][x] = ++sz;
now = ch[now][x];
}
val[now] = id;
} inline void make_fail()
{
int i, now;
queue <int> q;
for(i = ; i <= ; i++)
if(ch[][i])
q.push(ch[][i]);
while(!q.empty())
{
now = q.front(), q.pop();
for(i = ; i <= ; i++)
{
if(!ch[now][i])
{
ch[now][i] = ch[fail[now]][i];
continue;
}
fail[ch[now][i]] = ch[fail[now]][i];
q.push(ch[now][i]);
}
}
} inline void ac()
{
int i, now = , x, y, len = strlen(s);
for(i = ; i < len; i++)
{
vis[now] = ;
x = s[i];
y = ch[now][x];
while(y && !vis[y])
{
vis[y] = ;
if(val[y]) ans[++ans[]] = val[y];
y = fail[y];
}
now = ch[now][x];
}
} int main()
{
int i, j;
scanf("%d", &n);
for(i = ; i <= n; i++)
{
scanf("%s", s);
insert(i);
}
make_fail();
scanf("%d", &m);
for(i = ; i <= m; i++)
{
scanf("%s", s);
memset(vis, , sizeof(vis));
memset(ans, , sizeof(ans));
ac();
if(ans[])
{
printf("web %d:", i);
sort(ans + , ans + ans[] + );
for(j = ; j <= ans[]; j++) printf(" %d", ans[j]);
printf("\n");
tot++;
}
}
printf("total: %d\n", tot);
return ;
}
[HDU2896]病毒侵袭(AC自动机)的更多相关文章
- hdu2896 病毒侵袭 AC自动机入门题 N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,
/** 题目:hdu2896 病毒侵袭 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:N(N <= 500)个长度不大于200的模式串 ...
- HDU2896 病毒侵袭 —— AC自动机
题目链接:https://vjudge.net/problem/HDU-2896 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- hdu2896 病毒侵袭 ac自动机
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...
- HDu-2896 病毒侵袭,AC自动机模板题!
病毒侵袭 模板题,不多说了.. 题意:n个不同的字符串分别代表病毒特征,给出m次查询,每次一个字符串(网址),求这个字符串中有几个病毒特征,分别从大到小输出编号,最后输出所有的带病毒网址个数.格式请看 ...
- hdu2896病毒侵袭(ac自动机)
链接 ac自动机的模板题 说2个注意的地方 一是题目说明包含所有ASCII字符,可以开到0-127 包含空格 题目会输入多个源串,在加完当前的val值时,不应清0,可以开个标记数组. #include ...
- HDU2896 病毒侵袭 AC自动机模板
各种MLE,这模板感觉有问题,next数组开128也会MLE,实际上可见字符为编号32~126,只用开100就行. #include <iostream> #include <cst ...
- hdu 2896 病毒侵袭 ac自动机
/* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【HDU2896】病毒侵袭 AC自动机
[HDU2896]病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年 ...
- hduoj-----(2896)病毒侵袭(ac自动机)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- Android开发-浅谈架构(二)
写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...
- AJPFX总结java开发常用类(包装,数字处理集合等)(二)
二:进军集合类 集合其实就是存放对象的容器,专业点说就是集合是用来存储和管理其他对象的对象,即对象的容器.集合可以扩容,长度可变,可以存储多种类型的数据,而数组长度不可变,只能存储单一类型的元素 用一 ...
- 洛谷P3773 [CTSC2017]吉夫特(Lucas定理,dp)
题意 满足$b_1 < b_2 < \dots < b_k$且$a_{b_1} \geqslant a_{b_2} \geqslant \dots \geqslant a_{b_k} ...
- android studio 定时器操作 实现定时执行相关任务
package ipget.wenzheng.studio.ipget; import android.os.Bundle; import android.os.Handler; import and ...
- http与WebSocket
利用websocket连接服务器的最大特点就是:持久链接的特点. 共同点是:都是基于TCP协议进行client-server的链接,websocket是HTML5提出的一套补缺HTTP链接中不能持久链 ...
- Oracle体系结构总览
第一篇 Oracle架构总览 先让我们来看一张图 这张就是Oracle 9i的架构全图.看上去,很繁杂.是的,是这样的.现在让我们来梳理一下: 一.数据库.表空间.数据文件 1.数据库 数据库是数 ...
- 诊断Java代码中常见的数据库性能热点问题应该这么做!
“你的Java应用程序的性能是怎样诊断和优化的?不妨看看这两位西医的方子.如果你有更好疗效的药方,也欢迎在评论区告诉我们. 当我在帮助一些开发者或架构师分析及优化Java应用程序的性能时,关键往往不在 ...
- react基础语法(四) state学习
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- EOS Dawn 3.0 智能合约 -- 新格式
1.简介 随着EOS Dawn 3.0发布,智能合约的坑又要重新踩了o(╥﹏╥)o:3.0不仅将原来本身就在链里的基础合约独立出来,简单的介绍见3.0合约改变,合约的书写方式也有巨大变化,相比之前更加 ...
- v8引擎详解
引用网址: https://blog.csdn.net/swimming_in_it_/article/details/78869549 前言 JavaScript绝对是最火的编程语言之一,一直具有很 ...