LightOJ 1427 -Repository(ac自动机)
题意:
求每个模式串在母串中出现的次数
- #include <map>
- #include <set>
- #include <list>
- #include <cmath>
- #include <queue>
- #include <stack>
- #include <cstdio>
- #include <vector>
- #include <string>
- #include <cctype>
- #include <complex>
- #include <cassert>
- #include <utility>
- #include <cstring>
- #include <cstdlib>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- typedef pair<int,int> PII;
- typedef long long ll;
- #define lson l,m,rt<<1
- #define pi acos(-1.0)
- #define rson m+1,r,rt<<11
- #define All 1,N,1
- #define read freopen("in.txt", "r", stdin)
- #define N 250001
- const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
- const int INF= 0x7ffffff;
- const int mod = ;
- char p[][],q[];
- int n,used[N],mer[N];
- struct Trie{
- int ch[N][],val[N],f[N],num;
- void init(){
- num=;
- memset(ch,,sizeof(ch));
- memset(val,,sizeof(val));
- memset(f,,sizeof(f));
- }
- int build(char *s){
- int u=,len=strlen(s);
- for(int i=;i<len;++i)
- {
- int v=s[i]-'a';
- if(!ch[u][v]){
- memset(ch[num],,sizeof(ch[num]));
- ch[u][v]=num++;
- }
- u=ch[u][v];
- }
- val[u]++;
- return u;
- }
- void getfail(){
- queue<int>q;
- for(int i=;i<;++i)
- if(ch[][i])
- q.push(ch[][i]);
- while(!q.empty()){
- int r=q.front();
- q.pop();
- for(int i=;i<;++i)
- {
- int u=ch[r][i];
- if(!u){ch[r][i] = ch[f[r]][i];continue;}
- q.push(u);
- int v=f[r];
- while(v&&!ch[v][i])v=f[v];
- f[u]=ch[v][i];
- }
- }
- }
- void find(char *T){
- set<int>se;
- int u=,len=strlen(T);
- for(int i=;i<len;++i){
- int v=T[i]-'a';
- while(u&&ch[u][v]==)
- u=f[u];
- u=ch[u][v];
- int tmp=u;
- while(tmp){
- if(se.find(tmp)==se.end()){
- se.insert(tmp);
- mer[tmp]++;
- }
- tmp=f[tmp];
- }
- }
- }
- }ac;
- int main()
- {
- int n,m,hao[];
- ac.init();
- scanf("%d",&m);
- for(int i=;i<=m;++i)
- {
- scanf("%s",p[i]);
- }
- scanf("%d",&n);
- for(int i=;i<=n;++i){
- scanf("%s",q);
- hao[i]=ac.build(q);
- }
- ac.getfail();
- memset(mer,,sizeof(mer));
- for(int i=;i<=m;++i){
- ac.find(p[i]);
- }
- for(int i=;i<=n;++i)
- printf("%d\n",mer[hao[i]]);
- return ;
- }
LightOJ 1427 -Repository(ac自动机)的更多相关文章
- Substring Frequency (II) LightOJ - 1427 AC自动机
https://vjudge.net/problem/LightOJ-1427 把所有模式串加入ac自动机,然后search的时候暴力,每个子串都暴力一下就好. 其实AC自动机就是,先建立好trie图 ...
- 基于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 ...
- [AC自动机]【学习笔记】
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- AC自动机 HDU 3065
大概就是裸的AC自动机了 #include<stdio.h> #include<algorithm> #include<string.h> #include< ...
随机推荐
- HttpServletRequestWrapper的使用
老大给了一个很实际的需求:有段程序,使用Http的方式与合作商交互,而且是明文传输数据.我方的代码已经打包放在服务器上运行了很长时间,这时合作商突然要求修改数据传输的方式,要求加密后再传输,而我方的原 ...
- 使用CAShapeLayer与UIBezierPath画出想要的图形
使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 步骤: 1.新建UIBezierPath对象bezierPath 2.新建CAS ...
- IOS 逆向工程之砸壳
在<iOS应用逆向工程>4.6.2节中,我们曾推荐使用iPhoneCake源的AppCrackr 1.7版给App砸壳.这种方式简单粗暴,省时省力,但正是因为它过于方便有木有,导致几乎所有 ...
- Eclipse项目和MyEclipse项目
因为Eclipse的项目结构和MyEclipse项目的结构不同,所以两者的项目之间不能直接运行的. 我们在创建Eclipse项目的时候可以进行一些设置,这样在Eclipse中创建的项目可以直接在MyE ...
- C++:虚函数的详解
5.4.2 虚函数详解 1.虚函数的定义 虚函数就是在基类中被关键字virtual说明,并在派生类重新定义的函数.虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问 ...
- C Socket Programming for Linux with a Server and Client Example Code
Typically two processes communicate with each other on a single system through one of the following ...
- 自定义View(5)Paint常用的一些绘制滤镜,特效等介绍
Shader 返回绘图过程中重复色块的基类 相关方法:Paint::setShader(Shader shader) BitmapShader 从位图加载重复色块 LinearGradient, Ra ...
- php整理(二): 数组
数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;v ...
- 抽象工厂在ADO.Net中的应用
https://msdn.microsoft.com/zh-cn/library/ms971499.aspx http://www.c-sharpcorner.com/UploadFile/moses ...
- [HDOJ2818]Building Block(带权并查集,路径压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2818 题意:有N个块,每次有两个操作: M x y表示把x所在的那一堆全部移到y所在的那一堆的下方. ...