solution-arc113e

前言

今天早上 div2 模拟赛的最后一道题。本来想着早点 AK 走了,没想到看到了这道名字叫做

的题目。一打开一股浓浓的 ARC 大分讨的感觉瞬间溢出屏幕。

题解

字典序,首先我们要意识到所有的 B 要尽量在前面,而且 B 要尽量少删。然后我们开始大力手玩、分讨。

S 的末尾为A

对于这种情况,我们可以做到不删 B。我们考虑每次选择一个极长的 A 的连续段的段首与 S 的末尾。这样子我们发现只要这个连续段的长度大于等于二那么 S 的末尾还是 A,且其它 A 都被仍到末尾了。对于所有 A 的长度为 1 的连续段我们可以两个两个和起来删。这样子做容易发现就是最优的了。设 A 长度大于 1 的连续段个数为 $x$,长度为一的连续段个数为 $y$ 那么有操作次数为 $x + \lceil {y \over 2} \rceil$。

S 的末尾不为A

先考虑一些不用删 B 的情况。

S 中 A 的个数为偶数

把 A 全部删掉!显然这样子是最大的了。

S 中 A全部都在开头

没得玩了,把 A 尽可能删掉吧!

S 中最后一个 A 在 $n - 1$ 或 $n - 2$ 位。

首先前面已经考虑的 A 的个数为偶数的情况了。所以我们可以把除了那个 A 之外的 A 全部删光。经过一点思考发现这样子是最优的。

好吧,现在我们貌似必须要开始删 B 了。

考虑删一个 A 连续段之前的一个 B 和末尾的那个 B 会发生什么,发现变成了 S 的末尾为 A 的情况了!怎么删最优?显然我们挪一个长度大于等于 2 的 A 连续段到末尾最好了。如此操作,我们就在最多删两个 B 的情况下严格的做完了这道题。/px

code

posted @ 2024-01-30 16:57  WRuperD  阅读(3)  评论(0编辑  收藏  举报  来源

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

这是一条自定义内容

这是一条自定义内容