hdu2896病毒侵袭(ac自动机)
ac自动机的模板题
说2个注意的地方 一是题目说明包含所有ASCII字符,可以开到0-127 包含空格
题目会输入多个源串,在加完当前的val值时,不应清0,可以开个标记数组。
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<stdlib.h>
- #include<vector>
- #include<cmath>
- #include<queue>
- #include<set>
- using namespace std;
- #define N 100010
- #define M 510
- #define LL long long
- #define INF 0xfffffff
- const double eps = 1e-;
- const double pi = acos(-1.0);
- const double inf = ~0u>>;
- const int child_num = ;
- int g;
- int o[M];
- char s[N];
- bool f[M];
- class ACAutomo
- {
- private:
- int ch[N][child_num];
- int val[N];
- int fail[N];
- int Q[N];
- int id[];
- int sz;
- public:
- void init()
- {
- fail[] = ;
- for(int i = ; i < child_num ; i++)
- id[i] = i;
- }
- void reset()
- {
- memset(ch[],,sizeof(ch[]));
- sz = ;
- }
- void insert(char *a,int key)
- {
- int p = ;
- for( ; *a ; a++)
- {
- int d = id[*a];
- if(ch[p][d]==)
- {
- memset(ch[sz],,sizeof(ch[sz]));
- val[p] = ;
- ch[p][d] = sz++;
- }
- p = ch[p][d];
- }
- val[p]=key;
- }
- void construct()
- {
- int i,head=,tail = ;
- for(i = ;i < child_num ; i++)
- {
- if(ch[][i])
- {
- Q[tail++] = ch[][i];
- fail[ch[][i]] = ;
- }
- }
- while(head!=tail)
- {
- int u = Q[head++];
- for(i = ; i < child_num ; i++)
- {
- if(ch[u][i])
- {
- Q[tail++] = ch[u][i];
- fail[ch[u][i]] = ch[fail[u]][i];
- }
- else
- ch[u][i] = ch[fail[u]][i];
- }
- }
- }
- void work(char *s)
- {
- int i,k = strlen(s);
- memset(f,,sizeof(f));
- int p = ;
- for(i = ;i < k ; i++)
- {
- int d = id[s[i]];
- p = ch[p][d];
- int tmp = p;
- while(tmp!=&&(val[tmp]!=||f[val[tmp]]))
- {
- if(!f[val[tmp]])
- o[g++] = val[tmp];
- f[val[tmp]] = ;
- tmp = fail[tmp];
- }
- }
- }
- }ac;
- int main()
- {
- int n,m,i;
- char vir[];
- ac.init();
- while(scanf("%d%*c",&n)!=EOF)
- {
- ac.reset();
- for(i = ; i <= n; i++)
- {
- gets(vir);
- ac.insert(vir,i);
- }
- scanf("%d%*c",&m);
- int ans = ;
- ac.construct();
- for(i = ; i <= m ;i++)
- {
- gets(s); g = ;
- ac.work(s);
- if(g==) continue;
- printf("web %d:",i);
- sort(o,o+g);
- for(int j = ;j < g ; j++)
- printf(" %d",o[j]);
- puts("");
- ans++;
- }
- printf("total: %d\n",ans);
- }
- 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自动机模板
各种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 ...
随机推荐
- java基础学习总结——基础语法1
一.标识符
- IHttpModule
随便写一个类继承IHttpModule 实现IHttpModule中的两个方法 Init() Dispose() public void Init(HttpApplication context) { ...
- zepto源码--核心方法10(位置)--学习笔记
今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...
- LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...
- js 除法 取整
js 除法 取整 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.roun ...
- vertical-align属性
准备阶段 vertical-align取值及含义: 值 含义 baseline 默认.元素放置在父元素的基线上. top 把元素的顶端与行中最高元素的顶端对齐 text-top 把元素的顶端与父元素字 ...
- NET基础(1):类型基础
所有类型都从System.Object 派生,‘运行时’要求每个类型都从System.Object类派生,也就是说,以下两个类型定义完全一致: //隐式派生字Object class Employee ...
- sqlserver安装出现问题
今天用友财务软件免费下载网站小编给 一个客户安装畅捷通T +11.51软件时,首先参照了SQL 2008 R2数据库安装教程安装SQL 2008 R2数据库时碰到一个奇怪的问题现象就是:安 装 SQL ...
- HttpClient请求返回JSON、图片
/** * Created by RongGuang on 2015/9/19. */ public class RongHttp { /** * Http Post请求 * @param url * ...
- JQuery EasyUI的datagrid的使用方式总结
JQuery EasyUI的datagrid的使用方式总结第一步:添加样式和js脚本在前台添加展示数据表格的table元素 例如: <div> <table id="tt& ...