UVA11019 Martix Matcher

题目描述:

给定一个\(n*m\)的文本串

问一个\(x*y\)的模式串出现的次数

AC自动机的奇妙使用

将\(x*y\)的模式串拆分成x个串,当x个串在同时被匹配时,认为原串被匹配

但是要区分匹配的行的差别,因此额外的附加一个二维数组\(cnt\)来表示匹配情况

记\(cnt(i,j)\)表示以\((i,j)\)为左上角的大小为\(x*y\)矩阵匹配了多少行。

将模式串拆成x个串,建成AC自动机

把文本串的n行放进去分别匹配,当枚举到文本串中的第i行第j个字符时,

如果匹配上了模式串中第k行,那么\(cnt(i - k, j - y + 1) +1\)

最后的答案即为\(\sum_{i=0}^{n-1} \sum_{j=0}^{m-1} [cnt(i,j)==x]\)

复杂度O(\(T(n*m+x*y)\))

但是,本题很坑

1.模式串可能有相同的两行,尽管模式串行结尾的fail指针不会互指,但是这种情况下要用链表储存

2.每次清AC自动机不要整个全部清,会带来极大的复杂度

3.尽量不要以1作为下标,讨论将变得很复杂

4.哈希的常数更优

5.本题卡常,如果过不去,考虑哈希

代码在此

转载于:https://www.cnblogs.com/reverymoon/p/8882299.html

UVA11019 Martix Matcher --- AC自动机相关推荐

  1. UVA11019 Matrix Matcher【hash傻逼题】【AC自动机好题】

    LINK1 LINK2 题目大意 让你在一个大小为\(n*m\)的矩阵中找大小是\(x*y\)的矩阵的出现次数 思路1:Hash hash思路及其傻逼 你把一维情况扩展一下 一维是一个bas,那你二维 ...

  2. 【uva11019-Matrix Matcher】AC自动机+优化+记录

    http://acm.hust.edu.cn/vjudge/problem/33057 题意:在二维文本串T中查找一个二维模板串P出现了多少次. 题解: 拆分模板串P的每一行,建AC自动机. 拆分文本 ...

  3. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现

    多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...

  4. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  5. AC自动机算法及模板

    AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报  分类: AC自动机(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...

  6. Keywords Search AC自动机QAQ

    AC自动机,一直以来都以为是一个非常高大上的算法,其实它还真的挺高大上的. 首先来说,ac自动机的思想与kmp类似,需要自己模拟来理解. 给两个博客: http://www.cppblog.com/m ...

  7. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  8. 【Luogu3041】视频游戏的连击(AC自动机,动态规划)

    题面链接 题解 首先构建出AC自动机 然后在AC自动机上面跑DP 转移很显然从Trie树的节点跳到他的儿子节点 但是要注意一个问题, 在计算的时候,每一个节点加入后能够 造成的贡献 要加上他的子串的贡 ...

  9. HDU2896(AC自动机模版题)

    AC自动机模版题: 方法一:超时 #include<iostream> #include<algorithm> #include<cstring> #include ...

最新文章

  1. 巧用CSS的Wave滤镜
  2. 爆款入门 | 微生物组-扩增子16S分析和可视化(线上/线下同时开课,2022.4)
  3. iOS UIButton 图片文字上下垂直布局 解决方案
  4. OpenGL学习入门之VS2010环境配置 [转]
  5. Django视图(三)
  6. hdu 4409 Family Name List LCA +stl
  7. C++基础::string
  8. java 获取文件扩展名_如何在Java中获取文件扩展名
  9. matlab——度分秒与度的转换
  10. 斯坦福最新研究:看图“猜车祸”,用谷歌街景数据建立车祸预测新模型
  11. POJ 1862: Stripies
  12. 用python读取YUV文件 转RGB 8bit/10bit通用
  13. 机器人的自述作文_关于机器人的说明作文
  14. 如何给人物模型添加动画效果
  15. (一种因疏忽而发生的错误)Qt LNK2019:无法解析的外部符号
  16. 数学专业英语 -- 数理逻辑入门
  17. 【加拿大签证】加拿大政府指定的签证办理中国体检医院一览【2019官方最新版,加拿大签证体检必看】
  18. 用ORGE+OFUSION+CEGUI+NxOrge+OpenAL组件构造一个游戏引擎
  19. spring 运行原理
  20. 小乌龟html5小游戏,晨会互动小游戏之《抓乌龟》

热门文章

  1. FindFirstVolume系列函数遍历驱动器,获取驱动器信息
  2. 李爽久:平安云如何解决金融同业互联专线痛点
  3. 学习Linux坚持贴!
  4. switch..case使用
  5. C# Winform下载文件并显示进度条
  6. verilog中级别到底是什么?级别的分类是什么???
  7. Android 的singleLine废弃解决
  8. WebKit 内核源码分析 (三) Page
  9. 什么是单页面应用程序
  10. java模拟单链表环形链表解决约瑟夫问题