【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 ...
随机推荐
- 201621123050 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...
- Beta版本敏捷冲刺每日报告——Day3
1.情况简述 Beta阶段第三次Scrum Meeting 敏捷开发起止时间 2017.11.4 08:00 -- 2017.11.4 22:00 讨论时间地点 2017.11.4晚9:00,软工所实 ...
- Codechef March Challenge 2014——The Street
The Street Problem Code: STREETTA https://www.codechef.com/problems/STREETTA Submit Tweet All submis ...
- java克隆之深拷贝与浅拷贝
版权声明:本文出自汪磊的博客,转载请务必注明出处. Java深拷贝与浅拷贝实际项目中用的不多,但是对于理解Java中值传递,引用传递十分重要,同时个人认为对于理解内存模型也有帮助,况且面试中也是经常问 ...
- 故障公告:IIS应用程序池停止工作造成博客站点无法访问
非常抱歉,今天凌晨博客站点负载均衡中所有3台服务器的IIS应用程序池突然停止工作,造成 1:20-7:45 左右博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解. 服务器操作系统是 Window ...
- :after/:before使用技巧
伪类:after/:before基本使用 div:before{ content:'';//必须要写,没写则伪元素无效 display:; position:''; ... } //在一个div子元素 ...
- 记一次向maven中央仓库提交依赖包
Maven是Java中最常用的依赖管理工具,Maven的中央仓库保罗万象,涵盖了各个领域的框架.工具和文档,也是Java生态强大生命力的体现.我们自己开发的一些有用有趣的代码也可以通过打包上传到mav ...
- Docker的容器操作
启动一次性运行的容器 入门级例子:从ubuntu:14.04镜像启动一个容器,成功后在容器内部执行/bin/echo 'hello world'命令,如果当前物理机没有该镜像,则执行docker pu ...
- Spring Security入门(2-2)Spring Security 的运行原理 2
- JSON(五)——同步请求中使用JSON格式字符串进行交互(不太常见的用法)
在同步请求中使用JSON格式进行数据交互的场景并不多,同步请求是浏览器直接与服务器进行数据交互的大多是用jsp的标签jstl和el表达式对请求中的数据进行数据的渲染.我也是在一次开发中要从其它服务器提 ...