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. javaWeb中 servlet 、request 、response

    1.Servlet (1)Servlet是JavaEE的一个动态web资源开发技 术,就是在服务器上运行的小程序,这个小程序是由服务器调用的,服务器为了能调用这个小程序,就要求这样的程序必须实现一个S ...

  2. JavaScript箭头函数 和 generator

    箭头函数: 用箭头定义函数........           var fun = x=>x*x alert(fun(2))            //单参数   var fun1 = ()=& ...

  3. php案列分享

    <?php function GetfourStr($len) { $chars_array = array( "0", "1", "2&quo ...

  4. $(window).height()获取到的高度不对

    关于这个问题,网上有人说这是webkit内核的浏览器导致的,且只有这种浏览器会出现,只需要将html5的声明整成标准的带有<!doctype>的声明的就行了,但是本人亲测仍然是不行的,所用 ...

  5. Python笔记总结week5

    Decorator:多层装饰器 #双层装饰器(用户登录,权限) #多层: 调用从最外层到最内层函数,返回值则从最内到最外层函数 USER_INFO = {} #USER_INFO['is_login' ...

  6. JavaScript 面向对象(二) —— 案例篇

    看案例前可以先看看基础篇:JavaScript 面向对象(一) —— 基础篇 案例——面向对象的选项卡:把面向过程的程序一步步改成面向对象的形式,使其能够更加的通用(但是通用的东西,一般会比较臃肿). ...

  7. javascript 中继承实现方式归纳

    转载自:http://sentsin.com/web/1109.html 不同于基于类的编程语言,如 C++ 和 Java,javascript 中的继承方式是基于原型的.同时由于 javascrip ...

  8. 从客户端(txtContent="<p>1</p>")中检测到有潜在危险的 Request.Form 值

    输入1也报这个错误, <pages validateRequest="false" 改了也不行,在页头改也不行.到底什么情况呢? 从这个地方找到了答案:http://nt.d ...

  9. Android中View的基础知识

    View的界限 View就是我们看到的界面,有四个界限范围分别是, Top/Left, Bottom/Right,坐标系从左上到右下.这四个值可以通过任何View的子类调用getTop()/get.. ...

  10. Add listitem with javascript 分类: Sharepoint 2015-07-16 20:23 4人阅读 评论(0) 收藏

    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', createListItem);//makes sure sp.js is loaded and the ...