AC自动机
小蒟蒻yyb
Studnet
展开
-
AC自动机模板【洛谷3796】
AC自动机的第三个模板 其实,个人觉得,目前我写的这三个不同的模板完全是可以合并在一起求解的。 只是,在这两个无关联的OJ上,同一个AC自动机都可以完成的问题被拆成了三道题而已。 因此,代码只需要略加修改即可解决这道题。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>原创 2017-07-09 23:46:26 · 2518 阅读 · 0 评论 -
【BZOJ1030】文本生成器(AC自动机,动态规划)
题面BZOJ题解超级简单良心送分题 很明显是所有状态-不合法状态 合法状态就是26m26^m 不合法状态做一个dpdp就好#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#原创 2018-02-09 15:52:29 · 231 阅读 · 0 评论 -
【BZOJ2434】阿狸的打字机(AC自动机,树状数组)
先写个暴力: 每次打印出字符串后,就插入到TrieTrie树中 搞完后直接搭ACAC自动机 看一看匹配是怎么样的: 每次沿着ACAC自动机走,在每一个节点都跳failfail指针 如果有xx串的末节点,就给答案+1+1 这样的话没有必要存下每个串 只要给ACAC自动机存一个父亲节点 记录一下每个串的结束位置 倒着往上跳就可以了 这样能够拿到4040分#include<iostre原创 2018-01-20 15:47:26 · 204 阅读 · 0 评论 -
【BZOJ3530】数数(AC自动机,动态规划)
题面BZOJ题解很套路的ACAC自动机+DPDP 首先,如果长度小于NN 就不存在任何限制 直接大力DPDP 然后强制限制不能走到带有标记的点上面如果长度恰好为NN的长度 那么,要考虑是否恰好卡在范围里面 于是DPDP状态多记一维 表示是否卡在范围里面最后求一下和就行啦#include<iostream>#include<cstdio>#include<cstdlib>#incl原创 2018-01-19 19:27:46 · 265 阅读 · 0 评论 -
【BZOJ1212】L语言(AC自动机)
题面BZOJ题解很自然的,既然要匹配单词,那就全部都丢到ACAC自动机里面去现在想想怎么匹配 先是ACAC自动机正常的匹配 如果此时这个位置能够匹配上一个串 我们就需要判断一下这个串覆盖到这个文本串中 它的前一位是否恰好被覆盖 如果有的话 我们也不能直接计算 因为可能是其他不同的串拼起来的 所以,就开一个数组差分 表示当前位置可以匹配最后,对于每个文本串 从前往后扫一遍差分数组原创 2018-01-18 21:14:51 · 287 阅读 · 0 评论 -
【BZOJ3172】单词(AC自动机)
题面Description某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。Input第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N<=200,单词长度不超过10^6Output输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。Sample Input3aaaaaaSample O原创 2018-01-09 15:15:09 · 221 阅读 · 0 评论 -
【Luogu2444】病毒(AC自动机)
题面洛谷题解如果存在一个无限长的串 证明可以在ACAC自动机上找到一个环 然后在上面可以无限跳所以构建ACAC自动机 在上面跑dfsdfs就好啦#include#include#include#include#include#include#include#include#include#includeusing namespace std;原创 2018-01-23 08:17:29 · 360 阅读 · 0 评论 -
【Luogu3132】审查(AC自动机)
题面Description农夫约翰为他的奶牛们购买了一份名字叫Good Hooveskeeping的定期杂志,因此奶牛们在挤奶期间就有了大量的阅读素材。遗憾的是在最新的一期上,有一篇有点儿不适当的文章,是关于如何烹饪完美的牛排。 FJ不想让她们看到那篇文章,(显然,这份杂志需要更好的编辑监督)。 FJ已经采集了杂志的所有文本,并将其创建成了一个长度最多10^6个字符的字符串。他有一个审查出来的想原创 2017-10-28 22:04:10 · 236 阅读 · 0 评论 -
【Luogu3041】视频游戏的连击(AC自动机,动态规划)
题面链接题解首先构建出AC自动机 然后在AC自动机上面跑DP 转移很显然从Trie树的节点跳到他的儿子节点 但是要注意一个问题, 在计算的时候,每一个节点加入后能够 造成的贡献 要加上他的子串的贡献 至于DP: 设f[i][j]表示已经使用了i个字母 当前在Trie树的第j个节点上面能够产生的最大贡献 很显然,转移到他的儿子节点上面,同时统计贡献即可#include<iostre原创 2017-10-10 00:03:38 · 186 阅读 · 0 评论 -
AC自动机详解
一直想写AC自动机了 但是考虑到学习AC自动机之前 还需要一点其他的知识的基础 于是我先补充好了Trie树和KMP的blog 如果以上两个知识点没有学好的话 请先学习这两个知识点再来学习AC自动机 Trie(字典树) KMP算法如果能够解决上面的两个 算法/结构 那么, 欢迎继续学习AC自动机首先我们要知道AC自动机是干什么用的。大家都知道KMP算法是求单字符串对单原创 2017-07-11 20:40:00 · 604 阅读 · 0 评论 -
AC自动机模板(【洛谷3808】)
题面题目背景这是一道简单的AC自动机模版题。用于检测正确性以及算法常数。为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交。 题目描述给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过。输入格式:第一行一个n,表示模式串个数;下面n行每行一个模式串;下面一行一个文本串。输出格式:一个数表示答案输入输出样例输入样例#1:2 a aa aa输出样例#1:2说明subtask原创 2017-07-06 15:40:56 · 2998 阅读 · 2 评论 -
AC自动机模板(【CJOJ1435】)
题面Description对,这就是裸的AC自动机。 要求:在规定时间内统计出模版字符串在文本中出现的次数。Input第一行:模版字符串的个数N。 第2->N+1行:N个字符串。(每个模版字符串的长度<=50) 第N+2行:一行很长的字符串。长的很。(使用AC自动机能在1s内计算出)Output共N行,每行输出一个模版及出现的次数。(之间有一个空格,按照输入顺序输出)Sample Input4原创 2017-07-06 16:49:24 · 1975 阅读 · 0 评论 -
【BZOJ2754】喵星球上的点名(AC自动机)
题面BZOJ题解友情提示:此题请不要在cogs上提交,它的数据有毒对于点名串构建ACAC自动机 然后把名字丢进去进行匹配, 大力统计一下答案即可 当然,要用mapmap记录trietrie树#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algori原创 2018-02-25 09:28:48 · 194 阅读 · 0 评论