<题目链接>

题目大意:

小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家能再帮帮他吗?
#include <bits/stdc++.h>
using namespace std; const int N = *;
int n,num[];
char words[][]; struct Trie{
int nxt[N][],fail[N],end[N];
int root,pos;
int newnode(){
for(int i=;i<;i++)
nxt[pos][i]=-;
end[pos++]=;
return pos-;
}
void init(){
pos=;root=newnode();
}
void insert(char s[],int id){
int len=strlen(s);
int now=root;
for(int i=;i<len;i++){
int to=s[i];
if(nxt[now][to] == -)
nxt[now][to]=newnode();
now=nxt[now][to];
}
end[now]=id;
}
void build(){
fail[root]=root;
queue<int>q;
for(int i=;i<;i++){
if(nxt[root][i]==-)
nxt[root][i]=root;
else{
fail[nxt[root][i]]=root;
q.push(nxt[root][i]);
}
}
while(!q.empty()){
int now=q.front();q.pop();
for(int i=;i<;i++){
if(nxt[now][i]==-)
nxt[now][i]=nxt[fail[now]][i];
else{
fail[nxt[now][i]]=nxt[fail[now]][i];
q.push(nxt[now][i]);
}
}
}
}
void query(char s[]){
int len=strlen(s);
int now=root;
for(int i=;i<len;i++){
now=nxt[now][s[i]];
int tmp=now;
while(tmp!=root){
if(end[tmp]!=)
num[end[tmp]]++;
//若每个模式串只在主串中匹配一次则加上 end[temp]=0;
tmp=fail[tmp];
}
}
for(int i=;i<=n;i++)
if(num[i]!=)
printf("%s: %d\n",words[i],num[i]);
}
}ac; char buf[int(2e6+)];
int main(){
while(~scanf("%d",&n)){
memset(num,,sizeof(num));
ac.init();
for(int i=;i<=n;i++){
scanf("%s",words[i]);
ac.insert(words[i],i);
}
ac.build();
scanf("%s",buf);
ac.query(buf);
}
}

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自己主动机)

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

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

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

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

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

  7. hdu 3065病毒侵袭持续中

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

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

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

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

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

随机推荐

  1. 【洛谷P2704【NOI2001】】炮兵阵地

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  2. python基础知识~配置文件模块

    一 配置文件模块   import ConfigParser ->导入模块  conf = ConfigParser.ConfigParser() ->初始化类二 系统函数  conf.r ...

  3. mysql 查询优化 ~explain解读之select_type的解读

    一 简介:今天咱们来聊聊explain的select_type 二 类型 (1)SIMPLE 简单的SELECT语句(不包括UNION操作或子查询操作) (2)PRIMARY/UNION PRIMAR ...

  4. Jetson tk1 安装 usbtoserials 驱动(重新刷机)

    一.tk1驱动包,文件系统和源码下载 截止2016年9月1号,tk1最版本为R21.5. (以下三个文件放在同一个文件夹下) 1.driver package(驱动包,相当于安装程序) https:/ ...

  5. linux 查看cpu的使用百分比

    先安装 sudo apt-get install sysstat 然后: mpstat -u 2 5

  6. js里的回调函数

    function a(callback)  // 定义一个函数 ,需要传入的参数是callback  然后callback的类型为一个函数{console.log("callback还表示传 ...

  7. kafka系列二、kafka manager的安装和使用

    1. Yahoo kafka manager介绍 项目地址:https://github.com/yahoo/kafka-manager Requirements: Kafka 0.8.1.1 or ...

  8. mysql安装与卸载(绿色版)

    1.下载压缩包,解压 2.配置环境变量 PATH:%MYSQL_HOME%\bin 3.在安装目录下新建my.ini配置文件: [mysql] default-character-set=utf8 [ ...

  9. AndroidStudio中builde.gradle文件详解

    Android Studio是采用Gradle来构建项目的,一个Android项目中包含两个build.gradle文件,如下图:     (1)最外层目录下build.gradle文件 最外层目录下 ...

  10. UITableView滑动性能优化扩展

    一点UITableView滑动性能优化扩展 影响UITableView的滑动,有哪些因素呢?  关于这一点,人眼能识别的帧率是60左右,这也就是为什么,电脑屏幕的最佳帧率是60Hz.  屏幕一秒钟会刷 ...