AC自动机及trie图 pascal
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的更多相关文章
- POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )
题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...
- AC自动机——1 Trie树(字典树)介绍
AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...
- AC自动机(trie图版)
AC自动机是一个多模字符串匹配的自动机(网上说的),主要作用是在一个长串中同时进行多个字符串的匹配 基础芝士: trie树(字典树) 烤馍片kmp单模字符串匹配 如果不会的建议去网上学一下(本篇讲解略 ...
- AC自动机学习笔记-2(Trie图&&last优化)
我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今 ...
- 小菜鸟 菜谈 KMP->字典树->AC自动机->trie 图 (改进与不改进)
本文的主要宗旨是总结自己看了大佬们对AC自动机和trie 图 的一些理解与看法.(前沿:本人水平有限,总结有误,希望大佬们可以指出) KMP分割线--------------------------- ...
- 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用.当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟 ...
- BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机+map维护Trie树)
题目大意:略 由于字符集大,要用map维护Trie树 并不能用AC自动机的Trie图优化,不然内存会炸 所以我用AC自动机暴跳fail水过的 显然根据喵星人建AC自动机是不行的,所以要根据问题建 然而 ...
- BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵
原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...
- 专题训练之AC自动机
推荐博客:http://www.cnblogs.com/kuangbin/p/3164106.html AC自动机小结 https://blog.csdn.net/creatorx/article/d ...
随机推荐
- el: 在jsp页面内使用函数判断子字符串
e.g. <c:forEach items="${datas}" var="data"> <c:if test="${not fn: ...
- Java List合并去重
List A和B A.removeAll(B); A.addAll(B); 例如有如下实体类: /** * hashset是如何保持元素的唯一性呢? * 是通过元素的hashcode和equals来表 ...
- google书签找回
解决办法: 1.查找google文件夹,win7为例子:C:\Users\ZhangSan\AppData\Local\Google\Chrome\User Data 找到这个文件夹,ZhangSan ...
- vs中部分快捷键
ctrl + r ctrl + r ctrl 按两次r修改变量名(修改被引用到的变量名),不同于ctrl + f(修改全部相同名字的) ctrl +r ctrl + m 先选中一部分da ...
- 在Mac上安装Sublime Text3的插件
首先安装插件管理器Package Control 打开Sublime, 按下快捷键 ctrl+', 然后粘贴下面的代码,然后按回车键: import urllib.request,os; pf = ' ...
- 时间控件之赋值问题:datetimebox
1.datetimebox不显示毫秒数: <input class="easyui-datetimebox" name="birthday" data-o ...
- Ecshop 后台增加一个左侧列表菜单menu菜单的方法
Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...
- C语言执行时报错“表达式必须是可修改的左值,无法从“const char [3]”转换为“char [120]” ”,原因:字符串不能直接赋值
解决该问题的方法:使用strcpy函数进行字符串拷贝 原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string ...
- Entity Framework – (复数)Plural and (单数)Singular 表名Table names
By default, the Entity Framework will assume that all of the names of your tables in your database a ...
- jquery_datatables
环境准备 1.dataTables 下载:http://download.csdn.net/detail/marskuroky/8173839 2.jsonObject 下载:http://downl ...