AC自动机 HDU 2896
n个字串
m个母串
字串在母串中出现几次
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<vector> using namespace std;
#define MAXN 130 //AC自动机
class node
{
public:
int index;
node * fail;
node * next[MAXN];
node()
{
index=;
fail=;
memset(next,,sizeof(next));
}
};
node *root;
//插入操作 来看自动机的肯定看过tire 没看过就别看了
void Insert(char *s,int id)
{
node *p=root;
while(*s)
{
int ind=*s-' ';
if(!p->next[ind])
p->next[ind]=new node;
p=p->next[ind];
s++;
}
p->index=id;
}
queue<node*>q1; void Build()
{
q1.push(root);
root->fail=NULL;//根节点
while(!q1.empty())
{
node *p=NULL;
node *now=q1.front();
q1.pop();
for(int i=;i<MAXN;i++)
{
if(now->next[i]) //存在
{
if(now==root) //第二层的话直接就到根
now->next[i]->fail=root;
else
{
p=now->fail;
while(p) //从父亲节点开始找 一直到存在这个孩子节点相同的字母 其实就是后缀相同了
{
if(p->next[i])
{
now->next[i]->fail=p->next[i];
break;
}
p=p->fail;
}
if(p==NULL)
now->next[i]->fail=root;
}
q1.push(now->next[i]);
}
}
} }
bool flag[];
vector<int>z[];
char s1[];
void Ques(char *s1,int id)
{
node *p=root;
memset(flag,,sizeof(flag));
int ind,len=strlen(s1);
for(int i=;i<len;i++)
{
ind=s1[i]-' ';
while(p->next[ind]==NULL&&p!=root)//存在的
p=p->fail;
p=p->next[ind];
if(!p)
p=root;
node *now=p;
while(now!=root&&!flag[now->index])//一个一个检验 这边是否有可以匹配的 子串 后缀相同
{
if(now->index)
{
z[id].push_back(now->index);
flag[now->index]=;
}
now=now->fail;
}
if(z[id].size()>=)
break;
}
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{ getchar();
char s[];
root=new node;
for(int i=;i<=n;i++)
{
scanf("%s",s);
Insert(s,i);
}
Build();
int m;
scanf("%d",&m);
int ans=;
for(int i=;i<=m;i++)
{
z[i].clear();
scanf("%s",s1);
Ques(s1,i);
if(z[i].size()>)
{
sort(z[i].begin(),z[i].end());
ans++;
}
}
for(int i=;i<=m;i++)
{
if(z[i].size())
{
printf("web %d:",i);
for(int j=;j<z[i].size();j++)
printf(" %d",z[i][j]);
printf("\n");
}
}
printf("total: %d\n",ans);
}
return ;
}
AC自动机 HDU 2896的更多相关文章
- 数据结构--AC自动机--hdu 2896
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- AC自动机 HDU 3065
大概就是裸的AC自动机了 #include<stdio.h> #include<algorithm> #include<string.h> #include< ...
- 从0开始 数据结构 AC自动机 hdu 2222
参考博客 失配指针原理 使当前字符失配时跳转到另一段从root开始每一个字符都与当前已匹配字符段某一个后缀完全相同且长度最大的位置继续匹配,如同KMP算法一样,AC自动机在匹配时如果当前字符串匹配失败 ...
- AC自动机 HDU 2222
t n个字串 1个母串 求出现几个字串 字串可能重复 #include<stdio.h> #include<algorithm> #include<string.h> ...
- (17/34)AC自动机/后缀数组/后缀自动机(施工中)
快补题别再摸鱼了(17/34) 1.AC自动机 #define maxnode 1000010 #define maxsize 26 struct ahocT{ int ch[maxnode][max ...
- hdu 2896 AC自动机
// hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...
- hdu 2896 病毒侵袭 ac自动机
/* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...
- AC自动机 - 多模式串的匹配运用 --- HDU 2896
病毒侵袭 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=2896 Mean: 略 analyse: AC自动机的运用,多模式串匹配. ...
- HDU 2896 (AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2896 题目大意:多个模式串.多个匹配串.其中串的字符范围是(0~127).问匹配串中含有哪几个模式串 ...
随机推荐
- Java NIO概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...
- 【原】JAVA SE编码规范
/* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...
- js几种生成随机颜色方法
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- BFC深入理解
BFC 在上一篇文章中,清除浮动方法解析,我们谈及了一些使用css属性解决浮动带来的影响.但是在解决浮动带来的影响的方法中,如果细心思考,会产生如下疑问: 为什么overflow可以清除浮动带来的影响 ...
- switch语句的妙用
switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...
- ArcGIS Engine开发之鹰眼视图
鹰眼是GIS软件的必备功能之一.它是一个MapControl控件,主要用来表示数据视图中的地理范围在全图中的位置. 鹰眼一般具有的功能: 1)鹰眼视图与数据视图的地理范围保持同步. 2)数据视图的当前 ...
- Android View的滑动 动画
[scrollTo/scrollBy] //控件内的文字会移动,但是控件本身不会移动,而且移动到控件之外之后,文字也就看不见了 if(v.equals(button2)){ button2.scrol ...
- 分别用ToolBar和自定义导航栏实现沉浸式状态栏
一.ToolBar 1.在build.gradle中添加依赖,例如: compile 'com.android.support:appcompat-v7:23.4.0' 2.去掉应用的ActionBa ...
- 正则表达式在iOS中的运用
1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- iOS 自定义方法 - 播放GIF
示例代码 ///////////////////////第一种/////////////////////// //// GifView.h// GIFViewer//// Created by ...