【HDU 2222】Keywords Search
http://acm.hdu.edu.cn/showproblem.php?pid=2222
今天学习了一下Aho-Corasick Automation。以前学了trie之后就停止搞字符串这方面了,因为今年NOI出现了AC自动机,所以要学习一下。
这个题目的代码很多,我只是贴出来纪念一下第一道AC自动机,我也是跟别人学的。希望做的题多了,我也可以形成自己的风格(这个风格就比较符合我了)……
加油!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std;int n,Cases;
char pattern[51],match[1000001];
struct Aho_Corasick{struct NODE{int cnt;NODE *fail,*next[26];NODE(){fail=NULL,cnt=0;memset(next,0,sizeof(next));}}*root,*p;queue<NODE*> q;void init(){root=new NODE();}void build(){q.push(root);while(!q.empty()){NODE *cur=q.front();q.pop();for(int i=0;i<26;i++) if(cur->next[i]){for(p=cur->fail;p;p=p->fail)if(p->next[i]){cur->next[i]->fail=p->next[i];break;}if(!p) cur->next[i]->fail=root;q.push(cur->next[i]);}}}void insert(char *s){int len=strlen(s);p=root;for(int i=0;i<len;i++){if(!p->next[s[i]-'a']) p->next[s[i]-'a']=new NODE();p=p->next[s[i]-'a'];}p->cnt++;}void query(char *s){int ans=0,len=strlen(s);p=root;for(int i=0;i<len;i++){while(!p->next[s[i]-'a'] && p!=root) p=p->fail;p=p->next[s[i]-'a'];if(!p) p=root;for(NODE *j=p;j&&j->cnt!=-1;j=j->fail)ans+=j->cnt,j->cnt=-1;}printf("%d\n",ans);}
}AC;int main(){scanf("%d",&Cases);while(Cases--){scanf("%d",&n);AC.init();while(n--){scanf("%s",pattern);AC.insert(pattern);}AC.build();scanf("%s",match);AC.query(match);}return 0;
}
转载于:https://www.cnblogs.com/Delostik/archive/2011/08/11/2135516.html
【HDU 2222】Keywords Search相关推荐
- 大数加法【HDU 1002】
大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...
- 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)
题干: Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission ...
- 【HDU - 1455】Sticks (dfs + 剪枝)
题干: George took sticks of the same length and cut them randomly until all parts became at most 50 un ...
- 【HDU - 4006】The kth great number (优先队列,求第k大的数)
题干: Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to wri ...
- 【HDU - 4217 】Data Structure? (线段树求第k小数)
题干: Data structure is one of the basic skills for Computer Science students, which is a particular w ...
- 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...
- 【HDU 5765】Bonds(进制运算妙用)
[HDU 5765]Bonds(进制运算妙用) Bonds Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- 【HDU 5755】Gambler Bo(高斯消元)
[HDU 5755]Gambler Bo(高斯消元) Gambler Bo Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072 ...
- 【HDU 6973】Bookshop 树剖+平衡树
[HDU 6973]Bookshop 树剖+平衡树 [引言] 平衡树的题做得比较少,难得补一次神题,记录一下供以后学习. [题意] 给出一棵 nnn 个结点的树,每个结点有一个价值为 pip_ ...
最新文章
- 京东方剑指物联网领域
- oracle11g与weblogic兼容,WebLogic 10.3.6与JDK 1.7的兼容问题
- 硬件丨十大人工智能芯片厂商
- 打造高效机房就这么简单(一)
- Logistics回归数据集(testSet.txt)《机器学习实战》【美】Peter Harrington python3.6+pycharm完美实现代码
- Spring Boot 多版本更新,紧急修复 RFD 安全漏洞
- 毕业论文 | 基于脉冲耦合神经网络(PCNN)的图像特征提取:论文及源代码及参考文献
- 手把手带你入门Python爬虫(三、PyMySQL)
- Linux 磁盘管理--RAID1创建
- 六度人和张星亮:SaaS市场要回归TO B本质
- 五大最主流浏览器综合性能测试
- Pixazza把每张图片自动变成广告赚钱
- ADO.NET数据访问模式
- 通过刷bios的方式在win8.1平板上启动windows phone模拟器
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered.异常处理
- 泡泡龙游戏的完整制作流程
- windows无法自动修复此计算机 鼠标,win10出现你的账户已被停用。开机按F8进不去。自动修复鼠标和键盘都用...
- qpython安装requests库_qpython3安装库的三种方法
- 牛逼了,用Python破解wifi密码
- 物联卡如何提高安全等级
热门文章
- Initializing Java Tooling 30% 停住不动了
- 温度记录仪开发_TinkerNode NBIoT物联网开发板
- 金税盘怎么安装在电脑上_金税盘怎么安装,电脑重装后怎样安装金税盘税控开票软件?...
- (25)System Verilog类外约束类内变量
- MRC522(2):超简易门禁
- oracle add datafile ora-01900,一卡通2.2维护手册
- 为什么叫光呆公式光_光镊力学理论简析
- Linux内核分析 - 网络[十二]:UDP模块 - socket
- uboot copy_from_nand代码详解
- 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(一)