题目链接 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自动机)的更多相关文章

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

    题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...

  2. hdoj 3065 病毒侵袭持续中(AC自动机)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...

  3. HDU 3065 病毒侵袭持续中

    HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. hdu 3065 病毒侵袭持续中【AC自动机】

    <题目链接> 题目大意: 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是 ...

  5. HDU 3065 病毒侵袭持续中(AC自己主动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...

  6. hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。

    /** 题目:hdu3065 病毒侵袭持续中 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:N(N <= 1000)个长度不大于50的 ...

  7. hdu----(3065)病毒侵袭持续中(AC自动机)

    病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. hdu 3065病毒侵袭持续中

    病毒侵袭持续中 http://acm.hdu.edu.cn/showproblem.php?pid=3065 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  9. HDU 3065 病毒侵袭持续中 (模板题)

    病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  10. HDU3065 病毒侵袭持续中 —— AC自动机

    题目链接:https://vjudge.net/problem/HDU-3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

随机推荐

  1. Github上fork的项目如何merge原Git项目

    问题场景 小明在Github上fork了一个大佬的项目,并clone到本地开发一段时间,再提交merge request到原Git项目,过了段时间,原作者联系小明,扔给他下面这幅截图并告知合并处理冲突 ...

  2. 当面对会反制遭破解装置的App该如何顺利提取数据

    在检测App的过程之中,总会遇到比较棘手的,以”侦测是否遭破解的装置”为例,便会是个不好处理的状况.当App具备侦测装置是否已遭Root时,一旦发现装置已遭破解,便会停止运行,等于是只准安装及运行在未 ...

  3. X-Admin&ABP框架开发-系统日志

    网站正常运行中有时出现异常在所难免,查看系统运行日志分析问题并能够根据错误信息快速解决问题尤为重要,ABP对于系统运行日志这块已经做了很好的处理,默认采用的Log4Net已经足够满足开发过程中的需要了 ...

  4. AUTOSAR学习之RTE - 可运行实体

    本文介绍RTE的运行体(runnable). An AUTOSAR component defines one or more "runnable entities". A run ...

  5. 对比度拉伸(一些基本的灰度变换函数)基本原理及Python实现

    1. 基本原理 对比度拉伸是扩展图像灰度级动态范围的处理.通过在灰度级中确定两个点来控制变换函数的形状.下面是对比度拉伸函数中阈值处理的代码示例,阈值为平均值. 2. 测试结果 图源自skimage ...

  6. linux环境下搭建自动化Jenkins管理工具

    一.搭建一个jak--tomcat服务器到自己的linux服务器上 具体的服务器搭建这里可以参考华华大佬的博客:https://www.cnblogs.com/liulinghua90/p/46614 ...

  7. java虚拟机学习笔记(四)---回收方法区

    Java虚拟机规范中规定不要求虚拟机在方法区实现垃圾收集,而且在方法区实现垃圾收集性价比确实很低.在堆中,尤其是新生代,一次垃圾收集可以回收75%-95%的空间,而永久代的垃圾回收效率远低于此. 永久 ...

  8. redhat linux 5.3安装activeMQ

    安装环境:linux redhat enterprise 5.3 activemq版本:5.9.01.从http://activemq.apache.org/download.html地址下载apac ...

  9. 【java提高】(17)---Java 位运算符

    Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算 ...

  10. Java一个简单的文件工具集

    class FileUtils { //文件目录下文件总数目 public static int fileNumber(File dir) { int filenumber = 0; if(dir.e ...