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的更多相关文章

  1. 数据结构--AC自动机--hdu 2896

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

  2. AC自动机 HDU 3065

    大概就是裸的AC自动机了 #include<stdio.h> #include<algorithm> #include<string.h> #include< ...

  3. 从0开始 数据结构 AC自动机 hdu 2222

    参考博客 失配指针原理 使当前字符失配时跳转到另一段从root开始每一个字符都与当前已匹配字符段某一个后缀完全相同且长度最大的位置继续匹配,如同KMP算法一样,AC自动机在匹配时如果当前字符串匹配失败 ...

  4. AC自动机 HDU 2222

    t n个字串 1个母串 求出现几个字串 字串可能重复 #include<stdio.h> #include<algorithm> #include<string.h> ...

  5. (17/34)AC自动机/后缀数组/后缀自动机(施工中)

    快补题别再摸鱼了(17/34) 1.AC自动机 #define maxnode 1000010 #define maxsize 26 struct ahocT{ int ch[maxnode][max ...

  6. hdu 2896 AC自动机

    // hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...

  7. hdu 2896 病毒侵袭 ac自动机

    /* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...

  8. AC自动机 - 多模式串的匹配运用 --- HDU 2896

    病毒侵袭 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=2896 Mean: 略 analyse: AC自动机的运用,多模式串匹配. ...

  9. HDU 2896 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2896 题目大意:多个模式串.多个匹配串.其中串的字符范围是(0~127).问匹配串中含有哪几个模式串 ...

随机推荐

  1. 自己动手写计算器v1.1

    这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...

  2. html文本垂直居中对齐

    html文本垂直居中对齐,代码如下: <div id="box" style="height:100px; line-height:100px; border:1p ...

  3. 织梦cms常用标签

    dedecms简介:织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内知名的PHP开源网站管理系统,也是使用用户较多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是 ...

  4. GJM : Unity3D HIAR -【 快速入门 】 五、导出 Android 工程、应用

    导出 Android 工程.应用 在开始之前,请务必先保存您的工程,同时确认您已经安装 Android SDK 和 JDK.安装操作请参考以下链接: 搭建开发环境 Step 1. 设置 Android ...

  5. mysql常处理用时间sql语句

    Mysql日期函数,时间函数使用的总结,以及时间加减运算(转) select timediff('23:40:00', ' 18:30:00'); -- 两时间相减SELECT substring( ...

  6. CSS3 @font-face的使用

    首先我们一起来看看@font-face的语法规则: @font-face { font-family: <YourWebFontName>; src: <source> [&l ...

  7. $_SERVER

    $_SERVER[‘HTTP_X_REWRITE_URL’] 和$_SERVER[‘REQUEST_URI’]的区别 php4.4.0不支持 $_SERVER[‘REQUEST_URI’],php5. ...

  8. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  9. JSPatch来更新已上线的App中出现的BUG(超级详细)

    JSPatch的作用是什么呢? 简单来说:(后面有具体的操作步骤以及在操作过程中会出现的错误) 1.iOS应用程序上架到AppStore需要等待苹果公司的审核,一般审核时间需要1到2周.虽然程序在上架 ...

  10. iOS开发--面试

    今天一大清早去面试, 公司距离我家还挺近的, 花了一个小时走着去, 也顺路印下简历, 理理思路, 到了公司面试官什么的都不错, 还给我讲了很多知识, 收货也是满满的, 总结下今天都遇到了哪些问题, 调 ...