hdu 3065病毒侵袭持续中(ac自动机)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3065
中文题题意不解释了。
依旧稍微改一下ac自动机模版就能过了。还有一个坑点!是多组数据!!!
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int M = 5e4 + 10 , MM = 2e6 + 10 , N = 1e3 + 10;
char str[N][60] , sl[MM];
int Next[M][27] , fail[M] , End[M] , c[M / 10] , L , root , cnt , ans;
int newnode() {
for(int i = 0 ; i <= 26 ; i++) {
Next[L][i] = -1;
}
End[L++] = 0;
return L - 1;
}
void init() {
L = 0 , ans = 0;
root = newnode();
memset(c , 0 , sizeof(c));
}
void build(char s[]) {
int len = strlen(s);
int now = root;
for(int i = 0 ; i < len ; i++) {
int id = s[i] - 'A';
if(Next[now][id] == -1) {
Next[now][id] = newnode();
}
now = Next[now][id];
}
End[now] = ++ans;
}
void get_fail() {
queue<int>q;
fail[root] = root;
for(int i = 0 ; i <= 26 ; i++) {
if(Next[root][i] == -1) {
Next[root][i] = root;
}
else {
fail[Next[root][i]] = root;
q.push(Next[root][i]);
}
}
while(!q.empty()) {
int now = q.front();
q.pop();
for(int i = 0 ; i <= 26 ; i++) {
if(Next[now][i] == -1) {
Next[now][i] = Next[fail[now]][i];
}
else {
fail[Next[now][i]] = Next[fail[now]][i];
q.push(Next[now][i]);
}
}
}
}
void match(char s[]) {
int len = strlen(s);
int now = root;
for(int i = 0 ; i < len ; i++) {
int id;
if(s[i] <= 'Z' && s[i] >= 'A') {
id = s[i] - 'A';
}
else {
id = 26;
}
now = Next[now][id];
int tmp = now;
while(tmp != root) {
if(End[tmp] > 0) {
c[End[tmp]]++;
}
tmp = fail[tmp];
}
}
}
int main()
{
int n;
while(scanf("%d" , &n) != EOF) {
init();
for(int i = 0 ; i < n ; i++) {
scanf("%s" , str[i + 1]);
build(str[i + 1]);
}
getchar();
get_fail();
gets(sl);
match(sl);
for(int i = 0 ; i < n ; i++) {
if(c[i + 1] != 0) {
printf("%s: %d\n" , str[i + 1] , c[i + 1]);
}
}
}
return 0;
}
hdu 3065病毒侵袭持续中(ac自动机)的更多相关文章
- HDU 3065 病毒侵袭持续中 (AC自动机)
题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...
- hdoj 3065 病毒侵袭持续中(AC自动机)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...
- HDU 3065 病毒侵袭持续中
HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3065 病毒侵袭持续中【AC自动机】
<题目链接> 题目大意: 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是 ...
- HDU 3065 病毒侵袭持续中(AC自己主动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...
- hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。
/** 题目:hdu3065 病毒侵袭持续中 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:N(N <= 1000)个长度不大于50的 ...
- hdu----(3065)病毒侵袭持续中(AC自动机)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 3065病毒侵袭持续中
病毒侵袭持续中 http://acm.hdu.edu.cn/showproblem.php?pid=3065 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 3065 病毒侵袭持续中 (模板题)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU3065 病毒侵袭持续中 —— AC自动机
题目链接:https://vjudge.net/problem/HDU-3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
随机推荐
- Python 使用k-means方法将列表中相似的句子聚为一类
由于今年暑假在学习一些自然语言处理的东西,发现网上对k-means的讲解不是很清楚,网上大多数代码只是将聚类结果以图片的形式呈现,而不是将聚类的结果表示出来,一下代码将老师给的代码和网上的代码结合了一 ...
- extjs4 表单验证自定义
extjs4 在验证上面支持的也特别好,他可以使用自带的格式验证,也可以自定义验证 比如:正则验证,密码重复填写对比验证,以及 调用后台方法验证,下面将验证方法统一写出以供参考 function lo ...
- 【Kubernetes 系列一】Kubernetes 概述
以下内容还可以通过 Google Slide 查看:https://docs.google.com/presentation/d/1eYP4bkVBojI_e6PqdpxIf0hvWO-JwAf-fy ...
- 三层架构(MVC)实现简单登陆注册验证(含验证码)
前言在我的上一篇微博里我已经提出了登陆的方法,当时我采取的是纯servlet方式,因为当时刚接触到servlet,正好网上没有这方面的全面讲解,所以我就发飙了.不过在现实生产中我们大多采用的三层架构. ...
- 洛谷 P3648 [APIO2014]序列分割
题意简述 有一个长度为n的序列,分成k + 1非空的块, 选择两个相邻元素把这个块从中间分开,得到两个非空的块. 每次操作后你将获得那两个新产生的块的元素和的乘积的分数.求总得分最大值. 题解思路 f ...
- 如何调教你的博客Episode2——移动端支持和UI美化
这个系列的文章是我在搭建博客园博客时所经历的过程. 在上一期如何调教你的博客Episode1——修改整体样式中,我们通过添加CSS样式,修改了页面的总体布局.但将文章发出之后,博客的布局就出现问题了: ...
- Kafka 0.8 Producer (0.9以前版本适用)
Kafka旧版本producer由scala编写,0.9以后已经废除,但是很多公司还在使用0.9以前的版本,所以总结如下: 要注意包Producer是 kafka.javaapi.producer.P ...
- Mybatis mapper动态代理的原理详解
在开始动态代理的原理讲解以前,我们先看一下集成mybatis以后dao层不使用动态代理以及使用动态代理的两种实现方式,通过对比我们自己实现dao层接口以及mybatis动态代理可以更加直观的展现出my ...
- Eclipse导入spring-boot-plus(三)
Eclipse导入spring-boot-plus 安装lombok插件 !!!请先确保Eclipse已安装lombok插件!!!
- 逆向破解之160个CrackMe —— 017
CrackMe —— 017 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...