CF2237D Fullmetal Bitchemist 题解
在操作,变换的题目中,我们可以尝试发掘不变的量,可以是量本身,也可以是量关于取模的结果
对于不变量的发掘,可以从多个角度.例如从相同性质/类型中挖掘,或者从一个具体的数据的操作和变换中发掘
思考
根据上文,我们考虑挖掘不变的量.
我们已知可以通过发现不变的量来入手.
我们观察一个合法的美丽序列到长度为1的序列的变换过程
我们从序列中\(0/1\)的个数入手,分别记作\(C_0,C_1\)并定义\(sub=C_1-C_0\)
我们观察一次变换
-
当是将两个\(0\)变成一个\(1\)的时候.
\(C'_1=C_1+1,C'_0=C_0-2\)
\(sub'=C'_1-C'_0=C_1+1-(C_0-2)=C_1-C_0+3=sub+3\) -
当是将两个\(1\)变换为一个\(0\)的时候
\(C'_1=C_1-2,C'_0=C_0+1\)
\(sub'=C'_1-C'_0=C_1-2-(C_0+1)=C_1-C_0-3=sub-3\)
我们发现,对于任意一次变换,\(sub\)总是\(+3/-3\),其实就是\(sub\)关于\(\pmod 3\) 不变
那么也就是说,我们的\(0/1\)串在整个变换的过程中,\(sub\)关于\(\pmod 3\) 不变.
那么我们观察,当最终的串为\(1\)是,\(sub \equiv 1 \pmod 3\)
当最终的串为\(0\)是,\(sub \equiv 2 \pmod 3\)
也就是说,最终串的\(sub\pmod 3\)后,总是\(1,2\)
同时,我们知道,在变换的过程中\(sub\)的值总是不变,所以只有一开始串的\(sub \pmod 3\)的值为\(1,2\)时这个串才有可能是美丽串.
同时,字串是交替串与字串不能继续操作了互为充分必要条件 这是显然的
所以,一个\(0,1\)交替串肯定不是美丽串.
那么,我们考虑如果一个串不是\(0/1\)串,且在\(sub \pmod 3\)的值总是\(1,2\)的情况下,会不会最终走向\(0/1\)串导致卡壳?
由于我们知道上文中模运算的规律,所以\(C_0=C_1\)的\(0/1\)串不需要考虑
那么我们举个例子.
\(10101\)
诺从一个不是\(0/1\)的串变换而来
那么一定是从\(111101\)或则他的镜像变换而来的.
但是我们显然可以让他变换成\(0001\),
也就是说,我们总可以撤回一次变换,使得字符串在模\(3\)的意义下为\(1,2\)且一开始不是\(0/1\)串的情况下不变换为\(0/1\)串.
综上,只要一个串满足如下,那么这个串是美丽的
-
\(sub \equiv 1\)或\(sub \equiv 2\)
-
不是\(0/1\)串

浙公网安备 33010602011771号