【HDU 2222】Keywords Search AC自动机模板题
参考iwtwiioi的模板写出来的。上午gty讲的并没有听懂,只好自己慢慢对着模板理解。
在HDU上为什么相同的程序提交有时T有时A!!!
奉上sth神犇的模板(不是这道题):
- var
- ch:char;
- q,g,num:array [0..500001] of longint;
- st:string;
- son:array [0..500001,'a'..'z'] of longint;
- ts:array [0..1000001] of char;
- l,s,t,n,i,j,m,k,ans,head,tail:longint;
- begin
- readln(t);
- while t<>0 do
- begin
- for ch:='a' to 'z' do begin son[0,ch]:=1; son[1,ch]:=0; end;
- dec(t);
- s:=1;
- g[1]:=0;
- fillchar(num,sizeof(num),0);
- readln(n);
- for i:=1 to n do begin
- readln(st);
- m:=length(st);
- l:=1;
- for j:=1 to m do
- if son[l,st[j]]<>0 then l:=son[l,st[j]]
- else begin
- inc(s);
- g[s]:=0;
- son[l,st[j]]:=s;
- l:=s;
- for ch:='a' to 'z' do son[s,ch]:=0;
- end;
- inc(num[l]);
- end;
- s:=1;
- head:=0;
- tail:=1;
- q[1]:=1;
- n:=0;
- while head<tail do
- begin
- inc(head);
- k:=q[head];
- for ch:='a' to 'z' do
- if son[k,ch]=0 then son[k,ch]:=son[g[k],ch]
- else begin g[son[k,ch]]:=son[g[k],ch];
- inc(tail);
- q[tail]:=son[k,ch];
- end;
- end;
然后是我的ACcode:
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #define for1(i,a,n) for(int i=(a);i<=(n);++i)
- #define for2(i,a,n) for(int i=(a);i<(n);++i)
- #define for3(i,a,n) for(int i=(a);i>=(n);--i)
- #define for4(i,a,n) for(int i=(a);i>(n);--i)
- #define CC(i,a) memset(i,a,sizeof(i));
- using namespace std;
- char a[10010],s[1000010];
- int ch[500010][30],fail[500010],w[500010],ans,cnt;
- inline void ins(char *b){
- int u=0,v,len=strlen(b);
- for2(i,0,len){
- v=b[i]-'a';
- if (!ch[u][v])ch[u][v]=cnt++;
- u=ch[u][v];
- }w[u]++;
- }
- inline void bfs(){
- queue<int>q;
- q.push(0);
- int u,p;
- while (!q.empty()){
- u=q.front();q.pop();
- for2(i,0,26) if (ch[u][i]){
- q.push(ch[u][i]);
- if (!u) continue;
- p=fail[u];
- while (p&&!ch[p][i])p=fail[p];
- fail[ch[u][i]]=ch[p][i];
- }
- }
- }
- inline void ac(char *b){
- int u=0,v,len=strlen(b),t;
- for2(i,0,len){
- v=b[i]-'a';
- while (u&&!ch[u][v])u=fail[u];
- u=ch[u][v];
- t=u;
- while (t){
- ans+=w[t];
- w[t]=0;
- t=fail[t];
- }
- }
- }
- inline void init(){CC(fail,0);CC(ch,0);CC(w,0);ans=0;cnt=1;}
- int main(){
- int T;scanf("%d",&T);
- while (T--){
- init(); int n;
- scanf("%d",&n);
- for1(i,1,n){
- scanf("%s",a);
- ins(a);
- }bfs();
- scanf("%s",s);
- ac(s);
- printf("%d\n",ans);
- }return 0;
- }
【HDU 2222】Keywords Search AC自动机模板题的更多相关文章
- HDU 2222 Keywords Search(AC自动机模板题)
学习AC自动机请戳这里:大神blog........ 自动机的模板: #include <iostream> #include <algorithm> #include < ...
- HDU 2222 Keywords Search (AC自动机)(模板题)
<题目链接> 题目大意: 给你一些单词,和一个字符串,问你这个字符串中含有多少个上面的单词. 解题分析: 这是多模匹配问题,如果用KMP的话,对每一个单词,都跑一遍KMP,那么当单词数量非 ...
- hdu 2222 Keywords Search ac自动机模板
题目链接 先整理一发ac自动机模板.. #include <iostream> #include <vector> #include <cstdio> #inclu ...
- hdu 2222 Keywords Search ac自动机入门
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:有N(N <= 10000)个长度不超过50的模式串和一个长度不超过1e6的文本串. ...
- hdu 2222 Keywords Search——AC自动机
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道AC自动机! T了无数边后终于知道原来它是把若干询问串建一个自动机,把模式串放在上面跑:而且只 ...
- HDU 2222 Keywords Search (AC自动机)
题意:就是求目标串中出现了几个模式串. 思路:用int型的end数组记录出现,AC自动机即可. #include<iostream> #include<cstdio> #inc ...
- Match:Keywords Search(AC自动机模板)(HDU 2222)
多模匹配 题目大意:给定很多个字串A,B,C,D,E....,然后再给你目标串str字串,看目标串中出现多少个给定的字串. 经典AC自动机模板题,不多说. #include <iostream& ...
- POJ2222 Keywords Search AC自动机模板
http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:给出一些单词,求多少个单词在字符串中出现过(单词表单词可能有相同的,这些相同的单词视为不同的分别计数 ...
- Keywords Search(AC自动机模板)
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
随机推荐
- 【读书笔记《Android游戏编程之从零开始》】2.Hello,World!
本人看的是PDF文档,很多都是直接都是复制粘贴的记录,简单的记录下笔记! 2.1 创建一个Android项目 Application Name: 应用名称(安装在手机上显示的名字)Project Na ...
- Volley(四)—— ImageLoader & NetworkImageView
Volley(四)—— ImageLoader & NetworkImageView ImageLoader是一个加载网络图片的封装类,其内部还是由ImageRequest来实现的.但因为源码 ...
- 堡垒机环境-jumpserver部署
1:安装数据库 这里是提前安装,也可以不安装,在安装jumpserver主程序的时候,他会询问你是否安装 yum -y install ncurses-devel cmake echo 'export ...
- localStorage和sessionStorage区别
localStorage和sessionStorage一样都是用来存储客户端临时信息的对象. 他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现) ...
- zepto.js 源码解析
http://www.runoob.com/w3cnote/zepto-js-source-analysis.html Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jqu ...
- 014医疗项目-模块一:删除用户的功能l
删除用户的功能我们还是按照:Dao->Service->Action->页面调试这种顺序来写. Dao: 我们使用逆向工程生成的方法就好: SysuserMapper sysuser ...
- FusionCharts参数的详细说明和功能特性(转)
功能特性animation 是否动画显示数据,默认为1(True)showNames 是否显示横向坐标轴(x轴)标签名称ro ...
- htaccess 增加静态文件缓存和压缩
增加图片视频等静态文件缓存: <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$"> Header set Cache-Cont ...
- 数据库SQL优化大总结之 百万级数据库优化方案(转)
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- bisController
public class BisController : Controller { // // GET: /Bis/ protected string GetJson(object obj) { Is ...