\(\mathbf{Part.-1}\)

给定一个由字符 AB 组成的字符串 \(S\) 。

在这根绳子上,您可以反复执行以下操作:

在字符串 \(S\) 中选择三个连续且相等的字符,这些字符要么是 AAB 要么是 BAA,然后将这三个字符从 \(S\) 中删除(删除后,剩余的字符会连接在一起)。

找出能执行此操作的最大次数。

给出 \(T\) 个测试用例;请分别求解。

\(\mathbf{Part. 0}\)

初始对题目结构的观察是重要的。

这题有两个显然的方向:

  • 考虑 AB 的连通块
  • 考虑操作区间的性质

对于第一种,它很可做,但是就是做不出来。

对于第二种,我们称一个操作 AABBAA 的操作区间 \([i, j]\) 为这三个字符在原字符串上最左边到最右边的区间。1

由于删除的三个字符是连续的,所以操作区间一定不会相交。因此,操作区间是嵌套的4。所以操作序列构成笛卡尔树的形式。

\(\mathbf{Part. 1}\)

我们先从简单的情况入手,考虑如何判断整个序列都能被消除。

首先,以 AB 个数为观察对象。容易发现,B 的个数一定要等于 \(\dfrac{n}{3}\)。2

继续从简单的情况入手,由 \((1)\),考虑观察一个操作区间。对于一个操作区间 \([i, j]\),首先它一定要满足 \((2)\)。然后,我们发现最后一步的消除 \((i, x, j)\) 一定是以 \(i\) 开头,\(j\) 结尾的。又因为只有 AABBAA 的三个数可以消除,所以 \(x\) 一定为 A,\(i, j\) 一定分别为 ABBA3

考虑回到整个序列。我们现在知道了操作区间有性质,再考虑整个序列,我们容易发现它能被分成若干个操作区间。

因此,我们有两个必要条件:

  • 由 \((2)\),B 的个数一定要等于 \(\dfrac{n}{3}\)。
  • 把整个序列划分成若干个区间,对于每一个区间,我们都要满足:
    • 由 \((2)\),B 的个数一定要等于 \(\dfrac{len}{3}\)。
    • 由 \((3)\),开头和结尾一定有一个 A 一个 B

\(\mathbf{Part. 2}\)

发现这个形式很归纳啊!而且如果这两个性质就是充分的话,就很舒服了。

我们可以尝试构造这样的不满足的情况,但你发现构造不出来。那能不能证?

事实上是可以的。由 \((4)\),操作区间实际上是嵌套的,每个操作区间都可以被分成多个小的操作区间。因此考虑归纳。

  • 长度为 \(3\) 时,结论显然。
  • 当长度为 \(len\) 时,我们容易发现存在长度 \(\geq 2\) 的 A 连续段。由于总共 B 的个数 \(\geq 2\),显然可以找到连续段的一段删除 AABBAA 后仍保证开头和结尾为 AB

因此,我们成功知道了一个序列全部消除的充要条件。

于是,接下来靠题感都能做了。我们直接考虑 \(f_x\) 表示前 \(x\) 个字符,最少留下几个。转移是枚举 \(1 \leq j < x\),然后判断 \([j + 1, x - 1]\) 能否全部消除。这是朴素的。

\(\mathbf{Part. +\infin}\)

以下是我自己的思考。显然,拿到一道题的第一感觉对于结论题来说十分重要。

这道题操作的结构是什么?对于每个连通块,操作一定发生在连通块的边界处。这是对的,也可以继续往下做,但是够深刻吗?

我们发现,如果一个连通块消失了,两边的连通块会合并,这不好刻画。

更加深刻的理解是:对于每一个操作,它组成的 \([l, r]\) 一定是嵌套的,呈现笛卡尔树的形式。

这个理解完全包含了连通块的理解,而且更加可做。这也不是特别难想,但是为什么我们想不到?或者说,为什么我们不会往这个方向想。

事实上,一道题的正确做法是线性的,是一条链,但是可能的所有解法构成一颗树。然而,我们的思维也是线性的,而且我们会讨厌推翻前面的一切做法,重新再来。

这是我们要跳脱出来的点。

[AGC066C] Delete AAB or BAA的更多相关文章

  1. NOIP2015 子串

    #149. [NOIP2015]子串 有两个仅包含小写英文字母的字符串 AA 和 BB. 现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的 ...

  2. UOJ149 【NOIP2015】子串

    本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! [问题描述]有两个仅包含小写英文字母的字符串 A ...

  3. ACM题目————Anagram

    Description You are to write a program that has to generate all possible words from a given set of l ...

  4. CodeForces 152C Pocket Book

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Prac ...

  5. 【NOIP2015】提高day2解题报告

    题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...

  6. 4560 NOIP2015 D2T2 子串

    4560 NOIP2015 D2T2 子串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 有两 ...

  7. CodeForces152C——Pocket Book(排列组合问题)

    Pocket Book DescriptionOne day little Vasya found mom's pocket book. The book had n names of her fri ...

  8. POJ1671 动态规划

    POJ1671 问题重述: 本题求解一首N行诗可能的押韵结构的数目.所谓押韵结构,指的是指定的行数之间必须押韵.例如一首3行诗的押韵结构可以是aaa, aab, aba, baa, abc 5种(aa ...

  9. 【NOIP2015】字串

    [NOIP2015]字串 标签: DP NOIP Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其 ...

  10. crunch--字典生成工具

    Crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活的制定自己的字典文件.使用Crunch工具生成的密码可以输出到屏幕,保存到文件.或另一个程序.crunch程序在2004年及以前 ...

随机推荐

  1. Vue 3中的ref和template refs详解(含Vue2迁移到Vue3方法)

    Vue 3中的ref和template refs详解 在Vue 3中,ref和模板引用(template refs)是两个相关但不同的概念,它们在组合式API(Composition API)中扮演着 ...

  2. .NET+AI | eShopSupport 知多少

    eShopSupport 项目深度解析 eShopSupport 项目的整体架构示意图.左侧为离线运行的工具(DataGenerator.DataIngestor.Evaluator)用于数据准备和评 ...

  3. 0x01 - 我的第一个 Object Visitor

    我的第一个 Object Visitor 预演准备 为了顺利的进行测试,你需要确保本地已经安装了以下这些必备的软件: dotnet 2.1 或者以上版本的 SDK,我们更建议直接安装 dotnet 5 ...

  4. 462.Minimum Moves to Equal Array Elements II——LeetCode进阶路

    原题链接https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/ 题目描述 Given a non-empty i ...

  5. ODOO14修改源生的图标

    第一步:在公司模型界面:拥有权限组:groups="base.group_no_one"  的人可以更改图标 第二步:odoo14\addons\web\static\src\js ...

  6. Java中的静态块(static{})

    静态块(static{}) (1) static关键字还有一个比较关键的作用,用来形成静态代码块(static{} 即static块 )以优化程序性能. (2) static块可以置于类中的任何地方, ...

  7. Jenkinsfile_定义全局全量

    一.通过def定义全局变量 注意:首行def定义的变量不能使用=赋值. def var pipeline { agent any stages { stage("定义var") { ...

  8. 现在的AI还能写出短剧剧本了?

    本文由 ChatMoney团队出品 现在大家打开抖音.小红书,琳琅满目,目光所能及的都是各种吸精剧情的小短剧,虽然这些短剧的制作成本低,但是作为编剧的要写脚本,可不认为这么容易啊......... 接 ...

  9. java 分批次读取大文件的三种方法

    1. java 读取大文件的困难java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&quo ...

  10. FastAPI日志审计:你的权限系统是否真的安全无虞?

    title: FastAPI日志审计:你的权限系统是否真的安全无虞? date: 2025/06/20 16:21:09 updated: 2025/06/20 16:21:09 author: cm ...