const maxn=;
type data=record
sum,failed:longint;
son:array ['a'..'z'] of longint;
end; var tree:array [..maxn] of data;
que:array[..maxn] of longint;
boo:array[..maxn] of boolean;
s:array[..] of char;
test,n,len,tot,ans:longint; procedure PK(x:longint);
begin
fillchar(tree[x].son,sizeof(tree[x].son),);
tree[x].sum:=;
tree[x].failed:=-;
end; procedure init; procedure insert;
var p,i:longint;
begin
p:=;
for i:= to len do
begin
if tree[p].son[s[i]]= then
begin
inc(tot);
PK(tot);
tree[p].son[s[i]]:=tot;
p:=tot;
end else p:=tree[p].son[s[i]];
end;
inc(tree[p].sum);
end; var i:longint;
begin
fillchar(boo,sizeof(boo),false);
tot:=;
PK();
readln(n);
for i:= to n do
begin
len:=;
while not eoln do
begin
inc(len);
read(s[len]);
if not(s[len] in ['a'..'z']) then begin dec(len); break; end;
end;
readln;
insert;
end;
end; procedure main; procedure bfs;
var h,t,now,p,f:longint;
ch:char;
begin
h:=;t:=;
que[]:=;
while h<=t do
begin
now:=que[h];
for ch:='a' to 'z' do
begin
p:=tree[now].son[ch];
if p<> then
begin
f:=tree[now].failed;
while (f<>-) and (tree[f].son[ch]=) do f:=tree[f].failed;
if f=- then tree[p].failed:=
else tree[p].failed:=tree[f].son[ch];
inc(t);
que[t]:=p;
end;
end;
inc(h);
end;
end; procedure AC_Automaton;
var i,now,p,f:longint;
begin
i:=;
now:=;
while i<=len do
begin
p:=tree[now].son[s[i]];
if p<> then
begin
f:=p;
while (not boo[f]) and (f<>) do
begin
boo[f]:=true;
inc(ans,tree[f].sum);
f:=tree[f].failed;
end;
now:=p;
inc(i);
end else
begin
f:=now;
while (f<>-) and (tree[f].son[s[i]]=) do f:=tree[f].failed;
now:=f;
if now=- then
begin
now:=;
inc(i);
end;
end;
end;
end; begin
bfs;
len:=;
while not eoln do
begin
inc(len);
read(s[len]);
if not(s[len] in ['a'..'z']) then begin dec(len); break; end;
end;
readln;
ans:=;
AC_Automaton;
writeln(ans);
end; begin
readln(test);
while test> do
begin
init();
main();
dec(test);
end;
end.

AC自动机及trie图 pascal的更多相关文章

  1. POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )

    题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...

  2. AC自动机——1 Trie树(字典树)介绍

    AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...

  3. AC自动机(trie图版)

    AC自动机是一个多模字符串匹配的自动机(网上说的),主要作用是在一个长串中同时进行多个字符串的匹配 基础芝士: trie树(字典树) 烤馍片kmp单模字符串匹配 如果不会的建议去网上学一下(本篇讲解略 ...

  4. AC自动机学习笔记-2(Trie图&&last优化)

    我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今 ...

  5. 小菜鸟 菜谈 KMP->字典树->AC自动机->trie 图 (改进与不改进)

    本文的主要宗旨是总结自己看了大佬们对AC自动机和trie 图 的一些理解与看法.(前沿:本人水平有限,总结有误,希望大佬们可以指出) KMP分割线--------------------------- ...

  6. 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组

    涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用.当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟 ...

  7. BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机+map维护Trie树)

    题目大意:略 由于字符集大,要用map维护Trie树 并不能用AC自动机的Trie图优化,不然内存会炸 所以我用AC自动机暴跳fail水过的 显然根据喵星人建AC自动机是不行的,所以要根据问题建 然而 ...

  8. BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵

    原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...

  9. 专题训练之AC自动机

    推荐博客:http://www.cnblogs.com/kuangbin/p/3164106.html AC自动机小结 https://blog.csdn.net/creatorx/article/d ...

随机推荐

  1. ajax和sap以及网络安全

    1.sap(single page  applaction)一个页面通过众多ajax请求完成的一个app 优点是:减少页面跳转,UI公用部分的重复加载 缺点: 1.ajax过多的请求,对服务器性能有所 ...

  2. WinForm 窗体基本属性、公共控件

    一.WinForm:客户端程序制作 - C/S (B/S:服务器端) 它是基于.NET Framework框架上运行,不是必须在windows系统上才能运行---------------------- ...

  3. iOS:使用代理模式监听开关状态改变事件

    记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell ...

  4. 关于小组所要做的APP的想法

    关于小组所要做的app,我们敲定下来是做关于在线做题的app,但是,纯粹的做题目的app我认为并没有什么大的吸引力,尤其是拿手机做题.所以,我们考虑准备在以下几个方面做功夫以增加吸引力.第一,我们的题 ...

  5. 转:spl_autoload_register与autoload的区别详解

    转:http://www.poluoluo.com/jzxy/201306/209614.html spl_autoload_register(PHP 5 >= 5.1.2)spl_autolo ...

  6. CoreOS Linux引入了Kubernetes kubelet

    CoreOS Linux引入了Kubernetes kubelet 作者:Kelsey Hightower 2015年8月14日 这周我们在 CoreOS Linux 的 alpha 开发版集成了 k ...

  7. 【原创】MVC4+Jquery+EasyUI实现的工作流平台

    最近把工作流从传统的WebFrom上迁移到我的MVC4安全权限基础框架中,感觉非常不错MVC4在各方面给用户的体验确实跟以前传统的WEB是质的提升.由于后面要做基于工作流技术的ERP,所以需要先把工作 ...

  8. 图片上传预览 (URL.createObjectURL)

    知识预备:1. URL.createObjectURL() 静态方法会创建一个 DOMString,它的 URL 表示参数中的对象.这个 URL 的生命周期和创建它的窗口中的 document 绑定. ...

  9. C++中的数组

    数组名作为参数时,传递的是数组的首地址, 主调函数中实参数组元素个数不应该少于形参数组的元素个数 把数组名作为参数时,一般不指定数组第一维的大小 即使指定,编译时也会被忽略的.

  10. sql server2008 r2 密钥

    Microsoft SQL Server 2008 R2序列号密钥 数据中心版32位:PTTFM-X467G-P7RH2-3Q6CG-4DMYB数据中心版64位:DDT3B-8W62X-P9JD6-8 ...