AC自己主动机模板
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自己主动机模板的更多相关文章
- NYOJ 1085 数单词 (AC自己主动机模板题)
数单词 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 为了可以顺利通过英语四六级考试,如今大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中能够通过六 ...
- hdu5384 AC自己主动机模板题,统计模式串在给定串中出现的个数
http://acm.hdu.edu.cn/showproblem.php?pid=5384 Problem Description Danganronpa is a video game franc ...
- HDU 2222 Keywords Search(AC自己主动机模板题)
题意:给出一个字符串和若干个模板,求出在文本串中出现的模板个数. 思路:由于有可能有反复的模板,trie树权值记录每一个模板出现的次数就可以. #include<cstdio> #incl ...
- HDU 5384 Danganronpa (AC自己主动机模板题)
题意:给出n个文本和m个模板.求每一个文本中全部模板出现的总次数. 思路:Trie树权值记录每一个模板的个数.对于每一个文本跑一边find就可以. #include<cstdio> #in ...
- 【HDU】病毒侵袭(AC自己主动机模板题)
AC自己主动机的模板题.因为输入的字符串中的字符不保证全为小写字母.所以范围应该在130之前,而前31位字符是不可能出如今字符串的(不懂得查下ACSII表即可了).所以仅仅须要开的结点数组大小为130 ...
- hdu2222--Keywords Search+AC自己主动机模板
题目链接:pid=2222">点击进入 KMP对模式串进行处理.然后就能够方便的推断模式串是否在目标串中出现了:这显示适合一个模式串多个目标串的情况.可是假设模式串有多个,这时假设还用 ...
- AC自己主动机模板(数组实现版)
BY 九野 做了一道题,用我的那种写法华丽丽的超时了.,无奈学一学数组实现的 #include<stdio.h> #include<string.h> #include< ...
- hdu 2222 Keywords Search ac自己主动机
点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- 字符串算法之 AC自己主动机
近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...
随机推荐
- 紫书 习题 10-5 UVa 1213(01背包变形)
这里就是01背包多了一维物品个数罢了 记得不能重复所以有一层循环顺序要倒着来 边界f[0][0] = 1 #include<cstdio> #include<vector> # ...
- PKU 2411 Mondriaan's Dream 状态DP
以前做过这题,今天又写了一次,突然发现写了一个好漂亮的DFS……(是不是太自恋了 - -#) 代码: #include <cstdio> #include <cstring> ...
- 【Henu ACM Round#20 D】 Devu and Partitioning of the Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一开始所有的数字单独成一个集合. 然后用v[0]和v[1]记录集合的和为偶数和奇数的集合它们的根节点(并查集 然后先让v[0]的大小 ...
- 【转】 基于C#.NET的高端智能化网络爬虫
[转] 基于C#.NET的高端智能化网络爬虫 前两天朋友发给我了一篇文章,是携程网反爬虫组的技术经理写的,大概讲的是如何用他的超高智商通过(挑衅.怜悯.嘲讽.猥琐)的方式来完美碾压爬虫开发者.今天我就 ...
- gluPerspective和gluLookAt的关系
参考文章 GL学习笔记(2) - 终于搞明白gluPerspective和gluLookAt的关系了(zz) gluPerspective的具体含义 解密--神秘的gluPerspective 函数原 ...
- Visual Studio Code Setup
Windows https://code.visualstudio.com/docs/setup/windows Additional Components and Tools https://cod ...
- Lesson 2 Building your first web page: Part 2
Tag Diagram You may have noticed that HTML tags come in pairs; HTML has both an opening tag (<tag ...
- 分享一下vue ui的分页的用法
var newToAddLeave = function(){ var goIndex = { template:` <i-table :columns="overTimeList.c ...
- 电脑无法上网,DHCP客户端不能正确获取IP地址
问题特征:DHCP服务器更新[保留]配置信息后,给一客户端绑定了新的IP地址;但客户端IP地址并未正确更新; 处理: 一.检查DHCP服务器配置; 1.MAC地址.IP地址均正确;并已“添加到筛选器” ...
- Python正则表达式初识(六)
继续分享Python正则表达式基础,今天给大家分享的正则表达式特殊符号是“[]”.中括号十分实用,其有特殊含义,其代表的意思是中括号中的字符只要满足其中任意一个就可以.其用法一共有三种,分别对其进行具 ...