1 |
|
附:证明
高中还是蛮常用的。
题意 可执行任意次操作:
问能否同时将 按升序排序。
思路 有如下结论:
操作一次, 对面还是, 对面还是,但是上下关系会翻转(定义翻转为 swap);
操作一次,有且仅有两组将翻转;
如果,则必然可以交换两列而不翻转(例如要换 1 列和 2 列,操作方案是 (1,3), (2,3), (1,2))。
所以现在化为,① 可以任意排序,② 只能翻转偶数次(记翻转次数为 cnt),问是否有解。
再转换一下,不要关注中间是如何操作的,只要 ① 最终状态有序,② 初始状态和最终状态满足 翻转偶数次,就一定有操作方法,也就一定有解。
还是按 B 的思路排序:不妨翻转为,按 升序排序,如果现在 不是升序则无解。现在的问题是,在有序的前提下,能否 构造 出只翻转偶数次的序列。
先看两个例子:
比如序列。直接排序得到,总共翻转奇数次,不行。而另一个有序序列是,总共翻转偶数次,可行。这就构造出了一个合法序列。
再如序列。直接排序得到,总共翻转奇数次,不行。尝试将绿色部分整体翻转,得到,总共翻转奇数次,但还是不行。尝试将白色部分整体翻转,也不行。可以发现这种情况总是无解。
再次强调,不要关注中间是如何操作的,只要能构造出合法的最终状态就有解。
问题一:什么时候能整体翻转?
问题二:整体翻转能够构造出合法解吗?
总结:在可能有序的前提下,如果能随意改变 cnt 的奇偶性,或者 cnt 本就是偶数,则有解。
时间复杂度,主要是排序。
1 |
|