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).问匹配串中含有哪几个模式串 ...
随机推荐
- 解决 Tomcat Server in Eclipse unable to start within 45 seconds 不能启动的问题
1.在 Eclipse 下方 Servers TAB页,双击 "Tomcat 7.0 at localhost": 2.在右上角处点开 Timeouts 的设定,修改Start( ...
- Eclipse搭建Maven Prooject(终于)
今天我们一起来探讨eclipse搭建maven项目的步骤 一.建一个maven项目, 1.找到File ,点击 2.弹出窗口,再点击new 3.弹出窗口,点击other 4.输入maven,找到mav ...
- Javascript9张思维导图
1.变量 2.运算符 3.数组 4.流程语句 5.字符串函数 6.函数基础 7.DOM操作 8.BOM 9.正则表达式
- Sublime Text通过插件编译Sass为CSS及中文编译异常解决
虽然PostCSS才是未来,但是Sass成熟稳定,拥有一大波忠实的使用者,及开源项目,且最近Bootstrap 4 alpha也从Less转到Sass了.所以了解Sass还是非常有必要的. 基于快速开 ...
- SharePoint2016合规性策略中心
如何开启 1. 打开sp2016的管理中心,找到[应用程序]-[创建网站集],如下图: 创建完毕后,如下图: 2. 开启搜索服务并进行爬网,否则进行网站集配置的,无法搜索到网站集 打开管理中心的[管理 ...
- Linux-学习前言
本随笔会持续,不定期更新.我有上网找与Linux相关的博客,发现很多人只写了几篇就没更新了,没有坚持下来!希望我能keep on. 最近一个月是考试月,可能更新会比较少.
- Hive-0.x.x - Enviornment Setup
All Hadoop sub-projects such as Hive, Pig, and HBase support Linux operating system. Therefore, you ...
- 无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决
最近在写动画的时候做一个倒计时的效果,就是数字从大到小的一个动画,但是当我设置要new PropertyPath("XXXXXXX")的时候却报了标题的异常,各种报错.百度了好久也 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...