CF1698F Equal Reversal
真神题。
首先注意到一个比较重要的事情,无论怎么操作,序列中相邻元素对集合始终相同,这是十分重要的,因为其充分利用了题目给我们的 \(a_l = a_r\) 的性质,另外一个事情就是 \(a_1 = b_1, a_n = b_n\)。
然后考虑这个条件是充要,具体构造证明:
考虑到目前 \(1 \sim i - 1\) 已经匹配,正要匹配 \(i\),且恰好 \(a_i \ne b_i\),我们考虑到 \((b_{i - 1}, b_i)\) 这组对,必然在 \(a\) 的 \(i \sim n\) 中出现过,仔细想想不难得出。
但是是按照 \((b_{i}, b_{i - 1})\) 出现还是 \((b_{i - 1}, b_i)\) 不确定,假如有 \((a_j, a_{j + 1}) = (b_{i}, b_{i - 1})\),那么直接翻转 \([i - 1,j + 1]\) 即可,符合条件。如果有 \((a_j, a_{j + 1}) = (b_{i - 1}, b_i)\),那么在 \(i \sim j, j + 1\sim n\) 找一组 \((k, l)\),使得 \(a_k, a_l\),翻转 \([k, l]\),然后必然可以转化为第一种情况。
我们还要说明一下必然存在这样一组 \((k, l)\),由于已经断言两个序列相邻元素对集合始终相同,假如不存在,那么相同元素只会集中分布在 \(i \sim j\) 和 \(j + 1 \sim n\),且两边没有相同元素,显然 \(1 \sim i - 1\) 对后面是无影响的,那么 \(j, j + 1\) 元素会始终不变,这违背了我们的充要条件,得证。
容易发现操作次数 \(< 2n\),时间复杂度为 \(O(n^2)\)。

浙公网安备 33010602011771号