【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 ...
随机推荐
- Beta冲刺NO.2
Beta冲刺 第二天 1.昨天的问题 由于前面的冲刺留下的问题很多,而且混乱的代码给我们接下来的完善工作带来了巨大的困难. 2. 今天解决的进度 潘伟靖: 1.对代码进行了review 2.为系统增加 ...
- Python upper()方法
描述 Python upper() 方法将字符串中的小写字母转为大写字母. 语法 upper()方法语法: str.upper() 参数 NA. 返回值 返回小写字母转为大写字母的字符串. 实例 以下 ...
- 关于Android 7.0(API24)相机的问题汇总
在开发Android项目的时候,我们会用到相机,有些时候只是开发一个普通的扫码,仅仅赋予一下 权限 就好了,但是有些时候是需要拍照和从相册中获取照片的.我们在Android 5.0以及5.0之前调用相 ...
- git(一)快速入门
1.设置用户名 git config --global user.name '你的用户名' 2.设置用户名邮箱 git config --global user.email '你的邮箱' 3. ...
- vue jquery js 获取当前时间本周的第一天 和 本月的第一天
交互的时候传输数据 后台要求这样的数据 直接上代码 这是我找度姨要的 附上链接 https://www.cnblogs.com/wasabii/p/7756560.html 它里面有本季度第一天 ...
- 记一次向maven中央仓库提交依赖包
Maven是Java中最常用的依赖管理工具,Maven的中央仓库保罗万象,涵盖了各个领域的框架.工具和文档,也是Java生态强大生命力的体现.我们自己开发的一些有用有趣的代码也可以通过打包上传到mav ...
- 释义Oracle 11r2中并行执行相关参数
因最近对现场某些服务器进行诊断和调整,用到了这类参数,因此对这类参数做了详尽的查阅和研究,现将该类参数释义如下,以方便同行和自己参考,禁止转载: 1.PARALLEL_ADAPTIVE_MULTI_U ...
- 租户、租户管理员、部门管理员和开发者在APIGW中的角色
一.参与者 1.vdcId:租户 2.运营管理员 operator: 一种角色 创建开发商 审批外置服务,如:hadoop集群 审批内置服务,如:<API使用申请> 3.租户管理员 ...
- groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration
参考链接:http://www.cnblogs.com/rightmin/p/4945797.html 1.引入groovy的jar包 2.引入groovy编译插件 3.遇到问题 Plugin exe ...
- eclipse开发Groovy代码,与java集成,maven打包编译
今天尝试了一下在eclipse里面写Groovy代码,并且做到和Java代码相互调用,折腾了一下把过程记录下来. 首先需要给eclipse安装一下Groovy的插件,插件地址:https://gith ...