声明


  想看加强版的戳这里(施工ing,作者正努力中)~

  先贴题目吧哎~   AC自动机加强版  洛谷 P3796


  题目: 洛谷 P3808 (数据范围困了我好久 TAT)

  反正涉及字符串的算法都很玄学,此模板不例外,能用到此模板的都至少 省选+  了。

  

  所需知识点:KMP、Trie。


  由于本人比较无能,忘了以前怎么理解的(包括 KMP 和 Trie),完全忘了,只找到模板,只会套用,等我理解了再来补坑吧!!~

  实在要看思路的这里有传送门:洛谷日报 44 期


  只贴标程(以后再补,一个模板贼长了):

 type
node=record
sum,failed:longint;
son:array ['a'..'z'] of longint;
end;
var
t:array [..] of node;
d,v:array[..] of longint;
s:array[..] of char;
n,len,tot,ans,i:longint;
procedure insert;
var
root,i:longint;
begin
root:=;
for i:= to len do
begin
if t[root].son[s[i]]= then
begin
inc(tot);
t[tot].failed:=-;
t[root].son[s[i]]:=tot;
end;
root:=t[root].son[s[i]];
end;
inc(t[root].sum);
end;
procedure bfs;
var
h,r,now,s,f:longint;
ch:char;
begin
h:=;
r:=;
while h<r do
begin
now:=d[h];
for ch:='a' to 'z' do
begin
s:=t[now].son[ch];
if s<> then
begin
f:=t[now].failed;
while (f<>-) and (t[f].son[ch]=) do
f:=t[f].failed;
if f=- then t[s].failed:=
else t[s].failed:=t[f].son[ch];
d[r]:=s;
inc(r);
end;
end;
inc(h);
end;
end;
procedure AC_Automaton;
var
i,now,k,x:longint;
begin
i:=;
now:=;
while i<=len do
begin
k:=t[now].son[s[i]];
if k<> then
begin
x:=k;
while (v[x]=) and (x<>) do
begin
v[x]:=;
inc(ans,t[x].sum);
x:=t[x].failed;
end;
now:=k;
inc(i);
end else
begin
x:=now;
while (x<>-) and (t[x].son[s[i]]=) do
x:=t[x].failed;
now:=x;
if now=- then
begin
now:=;
inc(i);
end;
end;
end;
end;
begin
readln(n);
t[].failed:=-;
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;
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;
AC_Automaton;
writeln(ans);
end.

AC_Automaton

AC自动机(简单版)(施工ing)的更多相关文章

  1. [模板][P3808]AC自动机(简单版)

    Description: 求n个模式串中有几个在文本串中出现 Solution: 模板,详见代码: #include<bits/stdc++.h> using namespace std; ...

  2. Ring HDU - 2296 AC自动机+简单DP和恶心的方案输出

    题意: 就是现在给出m个串,每个串都有一个权值,现在你要找到一个长度不超过n的字符串, 其中之前的m个串每出现一次就算一次那个字符串的权值, 求能找到的最大权值的字符串,如果存在多个解,输出最短的字典 ...

  3. POJ 1625 Censored!(AC自动机->指针版+DP+大数)题解

    题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个 思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz 状态转移方程dp[ ...

  4. 小明系列故事――女友的考验 HDU - 4511 AC自动机+简单DP

    题意:自己看题目,中文体面. 题解: 把所有不能走的路径放入AC自动机中. 然后DP[i][j]表示走到 i 这个点,且位于AC自动机 j 这个节点最短距离 然后直接DP即可.注意一点会爆int #i ...

  5. Walk Through Squares HDU - 4758 AC自动机+简单状压DP

    题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...

  6. Censored! - POJ 1625(ac自动机+简单dp+高精度运算)

    题目大意:首先给一个字符集合,这个集合有N个字符,然后需要一个长度为M的句子,但是据子里面不能包含的串有P个,每个串里面的字符都是有字符集和里面的字符构成的,现在想知道最多能构造多少个不重复的句子. ...

  7. AC自动机例题

    P3808 [模板]AC自动机(简单版) [题目描述] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. #include<bits/stdc++.h> using name ...

  8. [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

    前言 做过杭电.浙大或是北大等ACM题库的人一定对“刷题”不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到“Online Exercise”下的 ...

  9. 从Trie谈到AC自动机

    ZJOI的SAM让我深受打击,WJZ大神怒D陈老师之T3是SAM裸题orz...我还怎么混?暂且写篇`从Trie谈到AC自动机`骗骗经验. Trie Trie是一种好玩的数据结构.它的每个结点存的是字 ...

随机推荐

  1. 为什么TCP协议终止链接要四次?

    为什么TCP协议终止链接要四次? 1.当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B. 2.主机B收到A发送的FIN,表示收到了,就会发 ...

  2. 乘风破浪:LeetCode真题_018_4Sum

    乘风破浪:LeetCode真题_018_4Sum 一.前言 前面我们已经练习过了三个数相加的集合运算,现在变成了四个数,其实道理是一样的.三个数的时候可以转成两个数的加法,最后来解决,而四个数的可以转 ...

  3. SQL查询含有%号的字段

    select * from EMS_ANNOUNCEMENT where 1=1  and title like '%\%%'  escape '\'

  4. 在ASP.NET MVC中,使用Bundle来打包压缩js和css(转)

    转自:http://www.cnblogs.com/xwgli/p/3296809.html 在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和c ...

  5. django admin后台插件:django-suit入门

    去年9月底开始用django来做公司内部项目,开始对django有了一些了解,感觉django真的蛮强大的(也有很多人推荐flask,将来有空的话我会试试).今天的话只是介绍一个小东西,django管 ...

  6. Django中模型(三)

    Django中模型(三) 四.模型成员 1.类属性 objects:是Manager类的一个对象,作用是与数据库进行交互. 定义模型类时,没有定义管理器,则默认创建名为objects的管理器. 2.自 ...

  7. [USACO09MAR]Sand Castle

    嘟嘟嘟 太水了,大佬们就绕道吧…… 就是m, b数组分别排个序,然后更改对应位置的m[i]和b[i],就行了. 因为如果m[i]不改为b[i]而是b[i + 1]的话,那么必定要将m[j] (j &g ...

  8. pyenv 配置python虚拟环境

    安装pyenv环境 yum -y install git yum install gcc make patch gdbm-devel openssl-devel sqlite-devel readli ...

  9. AttributeError: 'module' object has no attribute get'

    最近在写python requests相关内容易,突然报错AttributeError: 'module' object has no attribute 'get'" 脚本肯定没问题 怎么 ...

  10. linux性能指标及分析工具

    一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上 ...