AC自动机 HDU 3065
大概就是裸的AC自动机了
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue> using namespace std; #define MAXN 130
class node
{
public:
node *fail;
node *next[MAXN];
int ind;
node ()
{
fail=;
ind=;
memset(next,,sizeof(next));
}
};
char s1[][];
char s2[];
int cnt[];
node *root;
void Insert(char *s,int id)
{
node *p=root;
while(*s)
{
int ind=*s-' ';
if(p->next[ind]==NULL)
p->next[ind]=new node;
p=p->next[ind];
s++;
}
p->ind=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]);
}
}
}
}
void dfs(node *p)
{
for(int i=;i<MAXN;i++)
if(p->next[i])
dfs(p->next[i]);
delete p;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{ root=new node;
memset(cnt,,sizeof(cnt));
for(int i=;i<=n;i++)
{
scanf("%s",s1[i]);
Insert(s1[i],i);
}
Build();
scanf("%s",s2);
int len=strlen(s2);
node *p=root;
for(int i=;i<len;i++)
{
int ind=s2[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)
{
if(now->ind)
{
cnt[now->ind]++;
}
now=now->fail;
}
}
for(int i=;i<=n;i++)
{
if(cnt[i])
printf("%s: %d\n",s1[i],cnt[i]);
}
dfs(root);
}
return ;
}
AC自动机 HDU 3065的更多相关文章
- 数据结构--AC自动机--hdu 2896
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- AC自动机 HDU 2896
n个字串 m个母串 字串在母串中出现几次 #include<stdio.h> #include<algorithm> #include<string.h> #inc ...
- 从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 3065 AC自动机
// hdu 3065 AC自动机 // // 题目大意: // // 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次 // // 解题思路: // // AC自动机,插入,构建, ...
- AC自动机 - 多模式串的匹配运用 --- HDU 3065
病毒侵袭持续中 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=3065 Mean: 略 analyse: AC自动机的运用. 这一题 ...
- HDU 3065 (AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...
- hdu 3065 AC自动机(各子串出现的次数)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
随机推荐
- C# 高效编程笔记1
C# 高效编程笔记1 1.使用属性而不是可访问的数据成员 (1).NET Framework中的数据绑定类仅支持属性,而不支持共有数据成员 (2)属性相比数据成员更容易修改 2.用运行时常量(read ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- git教程
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- html中role的作用
role 是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明. 通常这种情况出现在一些自定义的组件上,这样可增强组件的可访问性.可用性和可交互性. role的作用是描 ...
- Using AlloyTouch to control three.js 3D model
As you can see, the above cube rotation, acceleration, deceleration stop all through the AlloyTouch ...
- 深入理解javascript选择器API系列第二篇——getElementsByClassName
× 目录 [1]使用 [2]classList [3]扩展 前面的话 既然有getElementById()和getElementsByTagName()方法,为什么没有getElementsByCl ...
- 解读AppIcon图标设置置信息和App内存警告临界值
前面有同学问到了iOS内存警告临界值和工程项目里AppIcon的一些配置信息,相信对刚入行的同学来说,可能都会碰到类似的问题,记录一下供后来者查询. 1.先简单说下AppIcon的图标的配置信息 1) ...
- Java 策略模式和状态模式
本文是转载的,转载地址:大白话解释Strategy模式和State模式的区别 先上图: 本质上讲,策略模式和状态模式做得是同一件事:去耦合.怎么去耦合?就是把干什么(语境类)和怎么干(策略接口)分开, ...
- lucene自定义过滤器
先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤 ...
- grunt-笔记
package.json: { "name": "grunt-uglify", "version": "1.0.0", ...