【以前的空间】vijos 1720 阿狸的打字机
作为一个一个蒟蒻,跪了三个星期,终于在蔡大神的帮助下a了。这题网上的题解很多,不过大都把题解写的太简单了(对因为大神的题解只有三个字:傻叉题)……
总结一下网上题题解,其实就是一个奇妙的fail数,这个巧妙的东西看都看不懂真正比赛一定就是不出的。像我这种傻逼的做法就是建立一个ac自动机(蔡大神跪了两天我跪了2个星期)。首先建立一个ac自动机,不过不要把每个单词都取出来,网上话:1)遇到新的字母,增加节点(父亲节点下没有) 或 向下走(父亲节点下已有); 2)遇到删除字母('B),向上一层(即走到父节点) 3)产生一个新的单词('P'),标记一下这里是单词末尾。然后通过j单词上的节点的fail指针走能走到某个单词(i)的末尾,那么i就是j单词的一个匹配。(有一点好奇怪的就是一开始理解为一个单词在另一个单词中出现的个数,后来重新看题才发现是这个单词在整个字符串中出现的位置)。然后这样的话会超时……
所以大神们想了一个方法:反转fail指针,建立一个fail tree。从单词j上可以通过fail走到i的数量等于fail tree上,以i为根的子树有多少个单词j的点(嗯,由于数据很大大神们才不会告诉你要邻接表)。然后这只是第一步。
第二步就是所谓建立dfs序,这个东西好像很神奇但一直很乱到底是什么意思,其实很简单,就是比如根a1有两个节点a2、a3,那么dfs序就是a1-a2-a2-a3-a3-a1,其实就是dfs一遍时遍历的顺序呗。这是第二步
第三步就是处理了,重新处理一遍字符串,网上话:1)当遇到增加字母的时候,在dfs序中相应的位置(这个节点的op)+1; 2)当遇到删除字母(‘B')的时候,将上一步加的op-1; 3)当产生一个新的单词(’P‘)的时候,处理询问,就是询问x的op到ed之间的和……
(P.s. 记得开ansistring)
实际上处理很麻烦(一定是因为我代码能力差,各种各种怪的小方法解决了一些很麻烦的问题)然后第一个wa第二次只是开大了数组就ac了……三个星期终于在期中前搞完了。感谢大神们的指导以及不指导。关键还是要自己想通……
(代码巨丑……)
【以前的空间】vijos 1720 阿狸的打字机的更多相关文章
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- 【BZOJ-2434】阿狸的打字机 AC自动机 + Fail树 + DFS序 + 树状数组
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2022 Solved: 1158[Submit][Sta ...
- BZOJ_2434_[NOI2011]_阿狸的打字机_(AC自动机+dfs序+树状数组)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2434 给出\(n\)个字符串,\(m\)个询问,对于第\(i\)个询问,求第\(x_i\)个字 ...
- AC自动机:BZOJ 2434 阿狸的打字机
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1834 Solved: 1053[Submit][Sta ...
- BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )
一个串a在b中出现, 那么a是b的某些前缀的后缀, 所以搞出AC自动机, 按fail反向建树, 然后查询(x, y)就是y的子树中有多少是x的前缀. 离线, 对AC自动机DFS一遍, 用dfs序+树状 ...
- [NOI2011]阿狸的打字机(好题!!!!)
2785: [NOI2011]阿狸的打字机 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 7 Solved: 3[Submit][Status][We ...
- 【BZOJ2434】阿狸的打字机(AC自动机,树状数组)
[BZOJ2434]阿狸的打字机(AC自动机,树状数组) 先写个暴力: 每次打印出字符串后,就插入到\(Trie\)树中 搞完后直接搭\(AC\)自动机 看一看匹配是怎么样的: 每次沿着\(AC\)自 ...
- 【BZOJ2434】【NOI2011】阿狸的打字机(AC自动机,树状数组)
[BZOJ2434]阿狸的打字机(AC自动机,树状数组) 先写个暴力: 每次打印出字符串后,就插入到\(Trie\)树中 搞完后直接搭\(AC\)自动机 看一看匹配是怎么样的: 每次沿着\(AC\)自 ...
- P2414 [NOI2011]阿狸的打字机
P2414 [NOI2011]阿狸的打字机 AC自动机+树状数组 优质题解 <------题目分析 先AC自动机搞出Trie图 然后根据fail指针建一只新树 把树映射(拍扁)到一个序列上,用树 ...
随机推荐
- linux (rm指令) 及误删除解决
今天在群里看见这一幕: 看到这儿,我们学习一下 这个RM指令 rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件 ...
- 在线elasticsearch集群批量写入变慢,导致kafka消息消费延迟
写入报错如些: -- ::24.166 [elasticsearch[_client_][listener][T#1]] INFO com.mobanker.framework.es.Elastics ...
- windown reids
记录Windown安装Redis和php_redis扩展 和Linux系统不同windown中不需要编译安装:只需要下对版本拖拽过去即可: 首先安装redis服务: 可以百度下一个,只要注意系统版本即 ...
- cf#514B. Forgery(暴力)
B. Forgerytime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputsta ...
- 用Anko和Kotlin实现Android上的对话框和警告提示(KAD 24)
作者:Antonio Leiva 时间:Mar 9, 2017 原文链接:https://antonioleiva.com/dialogs-android-anko-kotlin/ 借助Builder ...
- 【SpringCloud】第五篇: 路由网关(zuul)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- zookeeper应用:屏障、队列、分布式锁
zookeeper工具类: 获取连接实例:创建节点:获取子节点:设置节点数据:获取节点数据:访问控制等. package org.windwant.zookeeper; import org.apac ...
- 有个AI陪你一起写代码,是种怎样的体验?| 附ICLR论文
从前,任何程序的任何功能,都需要一行一行敲出来. 后来,程序猿要写的代码越来越多,世界上便有了各种各样的API,来减少大家的工作量.有些功能,可以让API来帮我们实现. 不过,人类写下的话,API并不 ...
- Java学习个人备忘录之面向对象概念
对象,其实就是该类事物实实在在存在的个体. 类与对象之间的关系?类:一类事物的描述.对象:该类事物的实例.在java中通过new来创建的.举例来说,类就是汽车说明书,类只能在理论上造一辆汽车,并且这个 ...
- 20162328蔡文琛week09
学号 2016-2017-2 <程序设计与数据结构>第X周学习总结 教材学习内容总结 数据库是为了其他程序提供数据的应用软件. 关系书就哭通过唯一的标识符在不同表的记录见建立了关系. JD ...