【USACO】AC自动机
Description
对,这就是裸的AC自动机。
要求:在规定时间内统计出模版字符串在文本中出现的次数。
Input
第一行:模版字符串的个数N。
第2->N+1行:N个字符串。(每个模版字符串的长度<=50)
第N+2行:一行很长的字符串。长的很。(使用AC自动机能在1s内计算出)
Output
共N行,每行输出一个模版及出现的次数。(之间有一个空格,按照输入顺序输出)
Sample Input
4
hers
her
his
she
shershisher
Sample Output
hers 1
her 2
his 1
she 2
Hint
所有字母均为小写
所给模版不会重复
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; struct Lin
{
int next[];
int cnt,id;
}a[];
char s[];
int fail[];
int ans[];
char o[][];
int num=; void work(int x)
{
scanf("%s",o[x]);
int ls=strlen(o[x]);int u;
int p=;
for(int i=;i<ls;i++)
{
u=o[x][i]-'a';
if(a[p].next[u])p=a[p].next[u];
else
{
a[p].next[u]=++num;
p=num;
}
}
a[p].cnt++;
a[p].id=x;
} void getfail()
{
queue<int>q;
q.push();
int u,v,p;
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=;i<;i++)
{
v=a[u].next[i];
if(!v)continue;
p=fail[u];
while(p)
{
if(a[p].next[i])
{
break;
}
p=fail[p];
}
if(a[p].next[i] && a[p].next[i]!=v)fail[v]=a[p].next[i];
q.push(v);
}
}
}
void getanswer()
{
scanf("%s",s);
int p=;int ls=strlen(s);int u;int go;
for(int i=;i<ls;i++)
{
u=s[i]-'a';
while(!a[p].next[u] && p)p=fail[p];
p=a[p].next[u];
go=p;
while(go)
{
ans[a[go].id]+=a[go].cnt;
go=fail[go];
}
}
return ;
} int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
work(i);
getfail();
getanswer();
for(int i=;i<=n;i++)
printf("%s %d\n",o[i],ans[i]);
return ;
}
【USACO】AC自动机的更多相关文章
- BZOJ3075[USACO 2013 Mar Gold 3.Necklace]——AC自动机+DP
题目描述 给你一个长度为n的字符串A,再给你一个长度为m的字符串B,求至少在A中删去多少个字符才能使得B不是A的子串.注:该题只读入A和B,不读入长度,先读入A,再读入B.数据保证A和B中只含小写字母 ...
- [Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]
AC自动机模板题(膜jcvb代码) #include <iostream> #include <algorithm> #include <cstdio> #incl ...
- AC自动机题单
AC自动机题目 真的超级感谢xzy 真的帮到我很多 题单 [X] [luogu3808][模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P38 ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- AC自动机-算法详解
What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. 简单的说,KMP用来在一篇文章中匹配一个模式串:但 ...
- python爬虫学习(11) —— 也写个AC自动机
0. 写在前面 本文记录了一个AC自动机的诞生! 之前看过有人用C++写过AC自动机,也有用C#写的,还有一个用nodejs写的.. C# 逆袭--自制日刷千题的AC自动机攻克HDU OJ HDU 自 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3172: [Tjoi2013]单词 [AC自动机 Fail树]
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3198 Solved: 1532[Submit][Status ...
- BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1367 Solved: 598[Submit][Status ...
随机推荐
- pjax实例demo(c#,iis)
pjax 百度都是api 也没找到demo 自己写了一个 C#写的 需要iis架设 测试ie10 和 火狐 成功 ie10不要用兼容模式 不然不好使 iis 可以直接架设webDemo1文件夹(源码) ...
- iOS开发所有KeyboardType与图片对应展示
1.UIKeyboardTypeAlphabet 2.UIKeyboardTypeASCIICapable 3.UIKeyboardTypeDecimalPad 4.UIKeyboardTypeDe ...
- android 自定义ScrollView实现背景图片伸缩(阻尼效果)
android 自定义ScrollView实现强调内容背景图片伸缩(仿多米,qq空间背景的刷新) 看到一篇文章,自己更改了一下bug: 原文地址:http://www.aiuxian.com/arti ...
- 第十二条:考虑实现Comparable接口
与前面讨论的方法不同,compareTo()方法并没有在Object类中定义.相反,它是Comparable接口中唯一的方法. 一个类的实例对象要想是可以比较大小的,那么这个类需要实现Comparab ...
- DML数据操作语言之常用函数
所谓函数,就是输入某一值,得到相应的输出结果的功能.相当于一个加工厂,给了原料,最终产出成品. 其中原料 就是参数(parameter). 产品 就是返回值. 函数大致可以分为以下五个种类: 算术函数 ...
- Hibernate之SQL查询
Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用H ...
- 第二篇:Python数据类型
一.引子 1.什么是数据? x= #是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字(整型,长整型,浮点型,复数) 字 ...
- Spark性能优化总结
1. 避免重复加载RDD 比如一份从HDFS中加载的数据 val rdd1 = sc.textFile("hdfs://url:port/test.txt"),这个test.txt ...
- Java面试题(二)
系统整理了一下有关Java的面试题,包括基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中.其他方面如前端后端等等的面试题也在整理中,都会有的. 注:文末有福利! 1 ...
- LDAP是什么
LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.LDAP目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的 ...