1 条题解

  • 0
    @ 2026-5-1 1:26:17

    给出一份有严谨证明的题解。

    首先根据 T3|T|\le3,感受到浓烈的大分讨气息。

    • T=1|T|=1

      显然 SS 中有 TT 的时候无解,否则输出 00

    • T=2|T|=2

      • T1=T2T_1=T_2,不妨设为 00\texttt{00},发现假如有解,必须用一个 1\texttt{1} 把两个 0\texttt{0} 隔开,则要求 cnt1cnt02cnt_1\ge\lfloor\frac{cnt_0}{2}\rfloor,其中 cntcnt 表示个数,若满足,发现一定有解。
        1. 首先发现,当选择了一个翻转的串时,若这个串两端相同,00\texttt{00} 个数不变,否则串内部情况不变,与 1\texttt{1} 拼接到一起的部分可能造成 00\texttt{00} 的个数减 11,与 0\texttt{0} 拼接到一起的个数一定不会减少,这说明单次操作最多减少一个 00\texttt{00}。总操作数不低于 00\texttt{00} 的个数次。
        2. 接下来证明一定能使用这个个数次构造出合法解。考虑对于当前存在的一个 00\texttt{00},找到他前或后第一个长度超过 11 的连续 1\texttt{1} 段,由于有解,一定能够找到。
        3. 找到之后,考虑选择 00\texttt{00} 段和连续 1\texttt{1} 段最靠近的两个 0\texttt{0}1\texttt{1},并且以他俩作为选择的字符串的端点进行翻转,发现可以把当前 00\texttt{00} 断开,并且不会新增这样的串,一直进行上述操作即可。
      • 否则不妨设为 10\texttt{10},考虑相邻两个 10\texttt{10} 构成的串 10...10\texttt{10...10},由于他俩之间没有任何其余的 10\texttt{10}...\texttt{...} 这一坨只能是全 1\texttt{1} 或者全 0\texttt{0} 或者前缀 0\texttt{0} 和后缀 1\texttt{1} 这三种情况。
        1. 发现无论哪种情况,这样的串翻转之后 10\texttt{10} 个数一定少 11
        2. 扩展到多个相邻 10\texttt{10} 构成的串的情况,上述结论依然成立。
        3. 再扩展到任意串,发现反转之后 10\texttt{10} 串个数仍然至多少 11,总次数不少于个数次,下面继续构造合法解。
        4. 考虑找到当前串中最靠前和最靠后的 10\texttt{10},并且选上最前面的 10\texttt{10} 之前的极长的一段连续的 1\texttt{1} 以及最后面的 10\texttt{10} 之后的极长的一段连续的 0\texttt{0},作为我们选择的字符串,发现这样选择,串内部翻转之后 10\texttt{10} 一定减少 11,而且拼接处一定不会新增。
      • 综上,无论哪种情况,除无解之外,只需要数出 TT 作为 SS 字串出现的次数即可。
    • T=3|T|=3

      • 100\texttt{100}110\texttt{110}011\texttt{011}001\texttt{001}44 种情况本质相同。发现他们具有的性质与上述 10\texttt{10} 串完全一致,所以仍然只需要数 TT 作为子串的出现次数即可。

      • T1=T3T2T_1=T_3\ne T_2,不妨设为 101\texttt{101},考虑若一个此串被所选串完全包含,翻转之后没有任何变化,所以要是想消掉,显然需要被所选择串的边界分割。

        1. 考虑首先将任意两个 101\texttt{101} 两两配对,并选取前面的那个末尾的 01\texttt{01} 以及后面那个开头的 1\texttt{1},显然一次性减少 22 个并且不会新增。
        2. 如果最后剩下了一个 101\texttt{101},考虑直接选取序列最前面的 1\texttt{1} 那里的位置和当前 101\texttt{101}0\texttt{0} 的位置直接翻转,一定可以将这个消掉,并且不会产生新增。
        3. 综上,此时答案是 cnt2\lceil\frac{cnt}{2}\rceil,其中 cntcntTTSS 中的出现次数。
      • T1=T2=T3T_1=T_2=T_3,不妨设为 000\texttt{000},无解是简单的,考虑相邻的 1\texttt{1} 之间存在的 0\texttt{0} 的数量 x1,x2x_1,x_2\cdots,我们需要做的就是用最少次数使所有 xi2x_i\le2。首先有两个显然结论:

        1. 如果存在 1xi21\le x_i\le2,他在任意时刻一定不会变小。
        2. 对于任意 xi2x_i\le2,他们在任意时刻不可能变的大于 22

        这是因为上述两种情况都会消耗不必要的次数,一定不优。那么我们需要做的就是让所有 xj>2x_j>2xi<2x_i<2 去匀。

        1. 发现每次操作可以使 xi,xjx_i,x_j 变为 xik,xj+k(0kxi+xj)x_i-k,x_j+k(0\le k\le x_i+x_j) 的任意值。
        2. 对于 xi>2x_i>2,他需要匀出去 xi2x_i-20\texttt{0}。对于 xi=0x_i=0,可以一次性匀进来 22 个,xi=1x_i=1 则是 11 个。
        3. 显然尽量消耗 xi=0x_i=0ii 使最优的,能消耗的数量是 min(xi22(xi>2),cnt)\min(\sum\lfloor\frac{x_i-2}{2}\rfloor(x_i>2),cnt),其中 cntcnt 表示 xi=0x_i=0ii 的数量,直接计算即可。
    • 1

    信息

    ID
    7327
    时间
    1000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者