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. git error: object file .git/objects/b9/e269f50db2a3415cc8ad5ba40b82b9b6a13d45 is empty

    错误现象: 解决方法: 1.  find .git/objects/ -type f -empty | xargs rm 2. git fetch -p 3. git fsck --full

  2. eclipse下Tomcat7.0启动奔溃问题

    好久没用Eclipse了,如今上班这家公司正好用到了,完后用Tomcat启动项目一直报一个错,例如以下图 错误代码例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  3. 直播聊天室,点亮效果,jquery实现

    1.css #like_area img{ width: 30px; height: 30px; position: absolute; bottom: 100px; left: 60%; margi ...

  4. 分贝(dB)的理解

    分贝(dB,decibels)表达的是功率比(power ratio,P2/P1),而不是一个amount,P2>P1,分贝为正值,否则为负值.分贝是对数形式的,而不是线性形式的,也即 20 d ...

  5. html关于不换行代码

    类似这种效果  这是基于a标签 不是用table实现的 <a style="display: inline-block;white-space:nowrap;width: 100px; ...

  6. ZOJ 2588 Burning Bridges(求桥的数量,邻接表)

    题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 Burning Bridges Time Limit: 5 ...

  7. org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner$1

    不能加载或找不到 org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner$1 经查证,是mybatis-spring-xxx.jar 这个版 ...

  8. Linux下解压缩文件命令总结

    ---------------------------------------------tar命令: -v 可视化-c 新建包-f 指定文件名(除非你用默认用户名)-x 解压target.tar-r ...

  9. vuex requires a Promise polyfill in this browser.--ie-vue-兼容处理日记

    1.ie9+报错vuex requires a Promise polyfill in this browser. 解决如下: npm install --save-dev -polyfill 修改c ...

  10. 2017-2018年红头发新版Cisco认证网络工程师(CCNA-R&S)全新讲解分享

    网名"红头发",多年授课经验,业内资深思科认证讲师,其所写的CISCO认证原创技术文章风靡各大网站与培训机构.精通CISCO各类路由交换产品,熟悉JUNIPER M/T系列路由产品 ...