1.25 两道结论题的解法与思考

背景 1:今天确实没啥好活可以整。

背景 2:今天确实被两道结论题整破防了。

背景 3:拒绝偷跑!卑力下降!

背景 4:当学校寒假的学科答疑和做题冲突的时候,果断选择做题!

背景 5:背景怎么成碎碎念了。

背景 6:原来是吐槽役。

1. ARC094F Normalization

给定 \(\Sigma=\{a,b,c\}\) 的串,每次可以选择两个相邻的不同的字符,把它们同时都替换成除去这两种字符外的另一种字符。给定串 \(S\),问能通过操作到达多少种不同的串。\(O(n)\)

首先这种无厘头的操作,先考虑不变量:这是容易的,主要到将 \(a,b,c\) 看作 \(0,1,2\) 后,任何操作都不会改变全串的和模 \(3\) 后的余数。

然后再找一些必要条件,比如一开始的串不能全部相等,最后的串不能任意相邻位置都不同。这都是容易发现的。

然后我们发现 \(n=3\) 的时候形成了一个反例:abc 不能到达 bbb,但能到达 aaaccc。怎么办呢?

答案是,\(n\ge 4\) 的时候就没有反例啦!

实际上,由于题目的操作过于复杂,没法进行限制,所以研究其可达性基本上是唯一解题方法。研究可达性就是很多必要条件拼凑起来的。而对于可达性,验证结论正确性的一个方法是写个暴力玩玩,还有个方法是尝试归纳

尤其是对于这种 \(n=3\) 不行的时候。我们发现 \(n=4\) 的时候自由度更高了。我们尝试归纳,然后发现,我们可以把首字母给任意替换!于是就证明成功了。

但是笔者止步于“怎么办呢”。说明猜测结论正确性和归纳的显然性的功底还远远不够。

2. ARC152E XOR Annihilation

Annihilation 的意思是淫灭,毁灭。学习这个新单词或许比看这篇 blog 更加有用。

\(2^n-1\) 个球,每个球上有标号 \(w_i\),标号形成 \(1\)\(2^n-1\) 的排列。每个时刻,每个球如果其左侧的权值异或和 \(\oplus Z\) 大于右侧权值异或和 \(\oplus Z\) 那么就往左走,反之往右,或者相同就不动。两球位置相同会合并,新的权值也为异或和。问有多少个 \(0\le Z<2^n\) 使得最后球能不再运动。

首先注意到是排列,所以全体异或和为 \(0\)。于是,\(x\) 右侧的异或和相当于 \(x\) 的前缀异或和。

一个很重要的一步,是我们用前缀异或和 \(s_i\) 去替代 \(w\),于是每个球运动的依据在于 \(s_i\oplus Z\)\(s_{i-1} \oplus Z\) 的大小关系。令 \(t_i=s_i\oplus Z\)

这样的好处是,相邻两个球碰撞在一起的时候,实际上造成的后果,是 \(t_i\) 消失了(Annihilation)。这个就变得更清楚了。

这样更好的地方在于,由于我们会在 \(t_{i-1}\le t_i\ge t_{i+1}\) 的时候才能进行合并(如果同时取等那么不行),所以最终的 \(t\) 序列要么全是 \(Z\)(合法情况),要么一定形成一个单谷序列,且 \(t<Z\)(不合法情况)。

于是我们就可以在原先的 \(t\) 序列中考虑最终序列。我们考虑最小的 \(t\),如果 \(\min t< Z\) 那么一定不合法,如果 \(\min t\ge Z\) 那么一定合法。

于是问题就变成了所有的 \(s_i\oplus Z\ge Z\) 了。很神奇吧?

之后就简单了,因为这个条件等价于 \(Z\)\(s_i\) 的最高位处为 \(0\)

但是笔者止步于“一个很重要的一步”之前。问题出现在哪里呢?我们发现这题的解题过程,在于分析(排列的性质)-发现-转换(用 \(s_i\) 来表示)-分析(变化的条件与结果局面的性质)-发现-转换(\(\min t\ge Z\))-分析-解出。

如果我们发现了性质,但是没有进行进一步的转换:将操作表示成我们更容易接受的形式,那么一切都是白搭。要时刻记得要下笔去尝试进行转换,并进行进一步的分析。

posted @ 2024-01-25 21:48  LarsWerner  阅读(11)  评论(0编辑  收藏  举报