[AGC066C] Delete AAB or BAA
\(\mathbf{Part.-1}\)
给定一个由字符 A 和 B 组成的字符串 \(S\) 。
在这根绳子上,您可以反复执行以下操作:
在字符串 \(S\) 中选择三个连续且相等的字符,这些字符要么是 AAB 要么是 BAA,然后将这三个字符从 \(S\) 中删除(删除后,剩余的字符会连接在一起)。
找出能执行此操作的最大次数。
给出 \(T\) 个测试用例;请分别求解。
\(\mathbf{Part. 0}\)
初始对题目结构的观察是重要的。
这题有两个显然的方向:
- 考虑
A和B的连通块 - 考虑操作区间的性质
对于第一种,它很可做,但是就是做不出来。
对于第二种,我们称一个操作 AAB 和 BAA 的操作区间 \([i, j]\) 为这三个字符在原字符串上最左边到最右边的区间。1
由于删除的三个字符是连续的,所以操作区间一定不会相交。因此,操作区间是嵌套的4。所以操作序列构成笛卡尔树的形式。
\(\mathbf{Part. 1}\)
我们先从简单的情况入手,考虑如何判断整个序列都能被消除。
首先,以 A,B 个数为观察对象。容易发现,B 的个数一定要等于 \(\dfrac{n}{3}\)。2
继续从简单的情况入手,由 \((1)\),考虑观察一个操作区间。对于一个操作区间 \([i, j]\),首先它一定要满足 \((2)\)。然后,我们发现最后一步的消除 \((i, x, j)\) 一定是以 \(i\) 开头,\(j\) 结尾的。又因为只有 AAB 和 BAA 的三个数可以消除,所以 \(x\) 一定为 A,\(i, j\) 一定分别为 AB 或 BA。3
考虑回到整个序列。我们现在知道了操作区间有性质,再考虑整个序列,我们容易发现它能被分成若干个操作区间。
因此,我们有两个必要条件:
- 由 \((2)\),
B的个数一定要等于 \(\dfrac{n}{3}\)。 - 把整个序列划分成若干个区间,对于每一个区间,我们都要满足:
- 由 \((2)\),
B的个数一定要等于 \(\dfrac{len}{3}\)。 - 由 \((3)\),开头和结尾一定有一个
A一个B。
- 由 \((2)\),
\(\mathbf{Part. 2}\)
发现这个形式很归纳啊!而且如果这两个性质就是充分的话,就很舒服了。
我们可以尝试构造这样的不满足的情况,但你发现构造不出来。那能不能证?
事实上是可以的。由 \((4)\),操作区间实际上是嵌套的,每个操作区间都可以被分成多个小的操作区间。因此考虑归纳。
- 长度为 \(3\) 时,结论显然。
- 当长度为 \(len\) 时,我们容易发现存在长度 \(\geq 2\) 的
A连续段。由于总共B的个数 \(\geq 2\),显然可以找到连续段的一段删除AAB或BAA后仍保证开头和结尾为A和B。
因此,我们成功知道了一个序列全部消除的充要条件。
于是,接下来靠题感都能做了。我们直接考虑 \(f_x\) 表示前 \(x\) 个字符,最少留下几个。转移是枚举 \(1 \leq j < x\),然后判断 \([j + 1, x - 1]\) 能否全部消除。这是朴素的。
\(\mathbf{Part. +\infin}\)
以下是我自己的思考。显然,拿到一道题的第一感觉对于结论题来说十分重要。
这道题操作的结构是什么?对于每个连通块,操作一定发生在连通块的边界处。这是对的,也可以继续往下做,但是够深刻吗?
我们发现,如果一个连通块消失了,两边的连通块会合并,这不好刻画。
更加深刻的理解是:对于每一个操作,它组成的 \([l, r]\) 一定是嵌套的,呈现笛卡尔树的形式。
这个理解完全包含了连通块的理解,而且更加可做。这也不是特别难想,但是为什么我们想不到?或者说,为什么我们不会往这个方向想。
事实上,一道题的正确做法是线性的,是一条链,但是可能的所有解法构成一颗树。然而,我们的思维也是线性的,而且我们会讨厌推翻前面的一切做法,重新再来。
这是我们要跳脱出来的点。
[AGC066C] Delete AAB or BAA的更多相关文章
- NOIP2015 子串
#149. [NOIP2015]子串 有两个仅包含小写英文字母的字符串 AA 和 BB. 现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的 ...
- UOJ149 【NOIP2015】子串
本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! [问题描述]有两个仅包含小写英文字母的字符串 A ...
- ACM题目————Anagram
Description You are to write a program that has to generate all possible words from a given set of l ...
- CodeForces 152C Pocket Book
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...
- 【NOIP2015】提高day2解题报告
题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...
- 4560 NOIP2015 D2T2 子串
4560 NOIP2015 D2T2 子串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有两 ...
- CodeForces152C——Pocket Book(排列组合问题)
Pocket Book DescriptionOne day little Vasya found mom's pocket book. The book had n names of her fri ...
- POJ1671 动态规划
POJ1671 问题重述: 本题求解一首N行诗可能的押韵结构的数目.所谓押韵结构,指的是指定的行数之间必须押韵.例如一首3行诗的押韵结构可以是aaa, aab, aba, baa, abc 5种(aa ...
- 【NOIP2015】字串
[NOIP2015]字串 标签: DP NOIP Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其 ...
- crunch--字典生成工具
Crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活的制定自己的字典文件.使用Crunch工具生成的密码可以输出到屏幕,保存到文件.或另一个程序.crunch程序在2004年及以前 ...
随机推荐
- SgLang代码细读-1.从req到batch
SgLang代码细读-1.从req到batch 代码入口 & 初始化 sglang/python/sglang/srt/entrypoints/http_server.py launch_se ...
- 202402 湖北武汉 4D3N3P
202402 湖北武汉 4D3N3P D0 / 10 杭州出发 普速列车25T Z47 杭州-武昌 城站22:22开 第3候车室 这趟列车是武汉局"华东三直"中的其中一列,另外两列 ...
- 解密prompt系列54.Context Cache代码示例和原理分析
Context Cache的使用几乎已经是行业共识,目标是优化大模型首Token的推理延时,在多轮对话,超长System Prompt,超长结构化JSON和Few-shot等应用场景,是不可或缺的.这 ...
- 华为devcloud 自动构建和发布dotcore
托管代码创建一个仓库 并提交项目代码 然后创建一个编译构建 构建步骤选择 Msbuild构建 工具版本选择最新版 powershell 命令:我这里直接复制文件夹不行,所以 执行powershell ...
- File与IO流之File练习
创建文件夹,并在其中创建文件 package Java_test; import java.io.*; public class Test { public static void main(Stri ...
- odoo14使用的文件服务器【NFS】
linux系统之间要文件共享实现方式:目前测试系统为Ubuntu20.04LTS 条件:1.保证两个系统都是linux: 2.目前实现是同一个局域网内: 服务端:172.26.1 ...
- Spring注解之@Async:Spring Boot实现异步调用
前言 在日常开发过程中,会遇到一些需求是和主业务逻辑低耦合的,不要求和主业务逻辑同步进行,比如记录日志信息.发送消息通知电子邮件.生成PDF合同和导出报表等需求,而且,这些需求往往处理起来比较耗时.这 ...
- github无法访问问题解决方法
问题描述: 直接使用gtihub.com网址访问github浏览器无响应. 解决办法: 1.登录https://github.com.ipaddress.com/去查询github.com.githu ...
- 二叉排序树BST及CRUD操作
摘要 构造一颗二叉排序树(也叫二叉搜索树,BST,Binary Search Tree)十分简单.一般来讲,大于根节点的放在根节点的右子树上,小于根节点的放在根节点的左子树上(如果等于根节点,则可视情 ...
- 🚀 革命性AI提示词优化平台正式开源!
革命性AI提示词优化平台正式开源! AI时代最强大的Prompt工程师已经到来! 你是否还在为写不出高质量提示词而头疼?是否羡慕那些能够驾驭AI.让ChatGPT.Claude乖乖听话的"提 ...