hdu 3065 病毒侵袭持续中【AC自动机】
<题目链接>
题目大意:
- #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自动机】的更多相关文章
- 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自己主动机)
题目链接: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 ...
随机推荐
- Database学习 - mysql 数据库 索引
索引 索引在mysql 中也叫 '键',是存储引擎用来快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优化 ...
- try 、catch 、finally 、throw 测试js错误
try语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. finally 语句在 try 和 catch 之后无论有无异常都会执 ...
- 发送http请求的方法
在http/1.1 协议中,定义了8种发送http请求的方法 get post options head put delete trace connect patch. 根据http协议的设计初衷,不 ...
- CentOS和RedHat Linux的区别
RHEL 在发行的时候,有两种方式.一种是二进制的发行方式,另外一种是源代码的发行方式. 无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布.但如果你使用了他们的在线升级(包括补丁) ...
- linux服务器last查看关机记录
1.查看重启记录 last reboot命令 [root@test ~]# last reboot reboot system boot -.el6.x Mon May : - : (+:) rebo ...
- mysql系列七、mysql索引优化、搜索引擎选择
一.建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力.可是天 ...
- js使用中的小问题----textarea是否有value属性
使用jquery的选择器时想给textarea设置一个默认值时,采取了下面的方法: 不过失败了,但是看教程上确实成功的,那么肯定是有问题的. 经过上网查找以及自己验证发现: 1.textarea标签确 ...
- centos下httpd-2.4的编译安装
httpd-2.4编译安装 依赖于更高版本的apr和apr-util apr 全称 apache portable runtime 首先停用低版本的httpd服务 service ...
- Centos6安装FreeSWITCH 1.5时./configure问题解决记录
系统:Centos 6.4 64位: FreeSWITCH版本:1.5 具体的安装过程参考FreeSWITCH 官网wiki (也可以参考我的博客<Centos6安装FreeSWITCH> ...
- [学习笔记]Javascript的包装对象
例子1: var s="test"; s.len = 4; var t = s.len // t is undefined 原因是s是字符串,第二行代码,实际上是创建一个临时字符串 ...