AC自己主动机模板……

/*
* AC自己主动机模板
* 用法:
* 1、init() : 初始化函数
* 2、insert(str) : 插入字符串函数
* 3、build() : 构建ac自己主动机
* 4、query(str) : 返回出现的字符串个数
*
* 使用需注意事项:
* 1、注意输入的字符的范围,需对Next和其二维大小及相关參数进行更改
* 2、注意Next、Fail和End数组的大小,防止超内存过数组越界
* 3、依据实际情况对模板中“ buf[i] - 'a' ” 进行更改,否则可能会数组越界
* 此模板默认相关设置:
* 1、短字符串总长度不超过500000
* 2、输入字符串的内容仅仅由小写字母a~z构成
* 3、query()函数仅仅统计匹配的个数
* PS:上述都需依据须要自己更改。!。
*/
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
using namespace std; int Next[500010][26], Fail[500010], End[500010];
int root, L;
int newnode() {
for (int i = 0; i < 26; i++)
Next[L][i] = -1;
End[L++] = 0;
return L - 1;
}
void init() {
L = 0;
root = newnode();
}
void insert(char buf[]) {
int len = strlen(buf);
int now = root;
for (int i = 0; i < len; i++) {
if (Next[now][buf[i] - 'a'] == -1)
Next[now][buf[i] - 'a'] = newnode();
now = Next[now][buf[i] - 'a'];
}
End[now]++;
}
void build() {
queue<int>Q;
Fail[root] = root;
for (int i = 0; i < 26; i++) {
if (Next[root][i] == -1)
Next[root][i] = root;
else {
Fail[Next[root][i]] = root;
Q.push(Next[root][i]);
}
}
while ( !Q.empty() ) {
int now = Q.front();
Q.pop();
for (int i = 0; i < 26; i++) {
if (Next[now][i] == -1)
Next[now][i] = Next[Fail[now]][i];
else {
Fail[Next[now][i]] = Next[Fail[now]][i];
Q.push(Next[now][i]);
}
}
}
}
int query(char buf[]) {
int len = strlen(buf);
int now = root;
int res = 0;
for (int i = 0; i < len; i++) {
now = Next[now][buf[i] - 'a'];
int temp = now;
while ( temp != root ) {
res += End[temp];
End[temp] = 0;
temp = Fail[temp];
}
}
return res;
} int main() {
freopen("in.in", "r", stdin);
freopen("out.out", "w", stdout);
return 0;
}

AC自己主动机模板的更多相关文章

  1. NYOJ 1085 数单词 (AC自己主动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 为了可以顺利通过英语四六级考试,如今大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中能够通过六 ...

  2. hdu5384 AC自己主动机模板题,统计模式串在给定串中出现的个数

    http://acm.hdu.edu.cn/showproblem.php?pid=5384 Problem Description Danganronpa is a video game franc ...

  3. HDU 2222 Keywords Search(AC自己主动机模板题)

    题意:给出一个字符串和若干个模板,求出在文本串中出现的模板个数. 思路:由于有可能有反复的模板,trie树权值记录每一个模板出现的次数就可以. #include<cstdio> #incl ...

  4. HDU 5384 Danganronpa (AC自己主动机模板题)

    题意:给出n个文本和m个模板.求每一个文本中全部模板出现的总次数. 思路:Trie树权值记录每一个模板的个数.对于每一个文本跑一边find就可以. #include<cstdio> #in ...

  5. 【HDU】病毒侵袭(AC自己主动机模板题)

    AC自己主动机的模板题.因为输入的字符串中的字符不保证全为小写字母.所以范围应该在130之前,而前31位字符是不可能出如今字符串的(不懂得查下ACSII表即可了).所以仅仅须要开的结点数组大小为130 ...

  6. hdu2222--Keywords Search+AC自己主动机模板

    题目链接:pid=2222">点击进入 KMP对模式串进行处理.然后就能够方便的推断模式串是否在目标串中出现了:这显示适合一个模式串多个目标串的情况.可是假设模式串有多个,这时假设还用 ...

  7. AC自己主动机模板(数组实现版)

    BY 九野 做了一道题,用我的那种写法华丽丽的超时了.,无奈学一学数组实现的 #include<stdio.h> #include<string.h> #include< ...

  8. hdu 2222 Keywords Search ac自己主动机

    点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  9. 字符串算法之 AC自己主动机

    近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...

随机推荐

  1. [USACO12MAR]摩天大楼里的奶牛(状态压缩DP)

    题意 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 题解 一看以为是弱智题.(可能真的是,我太菜了) 然后跟walthou夸下海口:这么 ...

  2. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)

    [Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...

  3. 在启动php时,无法启动此程序,由于计算机中丢失MSVCR110.dll的解决方法

    在启动php时,运行RunHiddenconsole.exe php-cgi.exe -b 127.0.0.1:9000 -c时,出现错误:无法启动此程序,由于计算机中丢失MSVCR110.dll 方 ...

  4. Deferred Rendering(三)反锯齿和半透明问题

    Deferred 框架下的AA 前面说过Deferred 框架下无法使用硬件AA.这句话不严谨: Deferred Shading在G-Buffer之后,物体几何信息全被抛弃了,导致兴许每一个像素都独 ...

  5. 学password学一定得学程序

    题目描写叙述 以前.ZYJ同学非常喜欢password学.有一天,他发现了一个非常长非常长的字符串S1.他非常好奇那代表着什么,于是奇妙的WL给了他还有一个字符串S2.可是非常不幸的是,WL忘记跟他说 ...

  6. Delegates, Events, and Anonymous Methods 委托、事件与匿名方法

    http://www.cnblogs.com/r01cn/archive/2012/11/30/2795977.html

  7. 特性Attibute定义和使用

    1.定义特性 [AttributeUsage(AttributeTargets.Class,AllowMultiple = false,Inherited = false)] public class ...

  8. JWT Authentication Tutorial: An example using Spring Boot--转

    原文地址:http://www.svlada.com/jwt-token-authentication-with-spring-boot/ Table of contents: Introductio ...

  9. 基于.NET平台常用的框架技术整理

    个人整理 部分收藏于:http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线 ...

  10. java httpRequest和Response

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...