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 的情况下严格的做完了这道题。