t

n个字串

1个母串

求出现几个字串

字串可能重复

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue> using namespace std; class node
{
public:
int mark;
node *fail;
node * next[];
node()
{
mark=;
fail=;
memset(next,,sizeof(next));
}
};
bool flag[];
char s1[];
node *root;
queue<node *>q1;
void Insert(char *s,int id)
{
node *p=root;
while(*s)
{
int ind=*s-'a';
if(p->next[ind]==NULL)
p->next[ind]=new node;
p=p->next[ind];
s++;
}
p->mark++;
}
void Build()
{
q1.push(root);
root->fail=;
while(!q1.empty())
{
node *p=NULL;
node *now=q1.front();
q1.pop();
for(int i=;i<;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]);
}
}
}
}
void dfs(node *p)
{
for(int i=;i<;i++)
if(p->next[i])
dfs(p->next[i]);
delete p;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
root=new node;
for(int i=;i<=n;i++)
{
char s[];
scanf("%s",s);
Insert(s,i);
}
Build();
scanf("%s",s1);
int ans=;
int len=strlen(s1);
node *p=root;
for(int i=;i<len;i++)
{
int ind=s1[i]-'a';
while(p->next[ind]==NULL&&p!=root)
p=p->fail;
p=p->next[ind];
if(!p)
p=root;
node *now=p;
while(now!=root&&now->mark!=-)
{
ans+=now->mark;
now->mark=-;
now=now->fail;
}
}
printf("%d\n",ans);
dfs(root);
}
return ;
}

AC自动机 HDU 2222的更多相关文章

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

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

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

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

  3. AC自动机 HDU 3065

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

  4. AC自动机 HDU 2896

    n个字串 m个母串 字串在母串中出现几次 #include<stdio.h> #include<algorithm> #include<string.h> #inc ...

  5. AC自动机 HDOJ 2222 Keywords Search

    题目链接 题意:每个文本串的出现次数 分析:入门题,注意重复的关键字算不同的关键字,还有之前加过的清零.   新模板,加上last跑快一倍 #include <bits/stdc++.h> ...

  6. HDU 2222 AC自动机模板题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...

  7. HDU 2222 Keywords Search(AC自动机模版题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  8. HDU 2222(AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2222 题目大意:多个模式串.问匹配串中含有多少个模式串.注意模式串有重复,所以要累计重复结果. 解题 ...

  9. HDU 2222:Keywords Search(AC自动机模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 KMP是单模式串匹配的算法,而AC自动机是用于多模式串匹配的算法.主要由Trie和KMP的思想构成. 题意 ...

随机推荐

  1. 第三篇:Entity Framework CodeFirst & Model 映射 续篇 EntityFramework Power Tools 工具使用

    上一篇 第二篇:Entity Framework CodeFirst & Model 映射 主要介绍以Fluent API来实作EntityFramework CodeFirst,得到了大家一 ...

  2. SHA-256算法

    SHA-.h #ifndef _SHA_256_H #define _SHA_256_H #include<iostream> using namespace std; typedef u ...

  3. dpkg:处理软件包dradis (--configure)时出错

    dpkg:处理软件包dradis (--configure)时出错!解决方案:1.将info文件夹更名%mv /var/lib/dpkg/info /var/lib/dpkg/info_old2.新建 ...

  4. SpringBootService,一个基于spring boot搭建的SOA服务框架

    SpringBootService,这是一个spring boot微服务的框架,包括redis,mq,restful,定时器,mybatis.易扩容.易维护的架构. 项目说明 该项目使用maven进行 ...

  5. dagride实现模糊查询

    一:首行放置搜索元素(可以是easyui中的input.datetimebox.combox等等) 将各个元素的value值获取到存为Json格式(data{a:..,b:..,c:..}),再回车或 ...

  6. MBTiles

    MBTiles Specification MBTiles is a specification for storing tiled map data in SQLite databases for ...

  7. 移动信息化不能延续PC时代的痛

    当下,随着移动时代的到来,手机功能逐步完善,各个行业针对这一现象纷纷制定了相应的营销计划,于是霎时间兴起了一股网上订票/网上订饭/网上预约的热潮. 而对于IT行业,成为企业信息化最火的代名词莫过于移动 ...

  8. Android开发案例 - 图库

    本文不涉及UI方面的内容, 如果您是希望了解UI方面的访客, 请跳过此文. 本文将要详细介绍如何实现流畅加载本地图库. 像平时用得比较多应用, 如微信(见下图), 微博等应用, 都实现了图库功能, 其 ...

  9. ffmpeg 安装,转视频格式为m3u8,压缩视频

    # ffmpegffmpeg 安装,转视频格式为m3u8,压缩视频 ## ffmpeg 安装直接安装: apt-get install ffmpeg 运行 `ffmpeg` 看是否出现版本号以判断是否 ...

  10. 在虚拟机中安装CentOS

    1.准备工具 我当时下载的是VMware9.0.2,之后升级即可. 2.安装VMware9.0.2,按照步骤安装即可,安装成功并运行 选择创建新的虚拟机,出现下图,选择"自定义"后 ...