0%

CF-1024-D. Quartet Swapping(四重交换)

思路讲解

那么注意到,在该操作过程中,一个数下标的的奇偶性是不会发生变化的。
还有一个比较隐秘的不变量就是偶数下标的反转数和奇数下标的反转数是相同的,因为每次交换相邻偶数下标时, 会迫不得己地同时交换奇数下标,反之亦然。

那么要用到我们观察出来的第二个性质,就是偶数下标的反转数和奇数下标的反转数是相同的,那么如果说偶数下标序列和奇数下标序列的逆序对数量的奇偶性不相同(逆序对数量其实也就是需交换操作数量,因为本道题目是只能相邻交换,相当于冒泡排序),那么就说明必须要牺牲一个不反转(或者有时是在有序的基础上,再多反转一个,反正无论是 +1+1 还是 1-1 以后奇偶性一定就相同了)。

那么应该反转哪个最优呢?不难发现这样交换最优。

1
2
3
if((revOdd-revEven)%2!=0){
swap(Ans[N],Ans[N-2]);
}

AC代码

https://codeforces.com/contest/2101/submission/319512581

心路历程(WA,TLE,MLE……)