====== codeforces round 656(div3)====== =====A Three Pairwise Maximums====== 题意:给定$x,y,z$,且$x=\max(a,b),y=\max(a,c),z=\max(b,c)$,求符合条件的$a,b,c$ 题解:这题说实话一开始给我搞懵了,仔细想了想之后发现其实挺简单,首先可以发现,若x,y,z中至少有两个相同,而且相同的两个数都是$a,b,c$中的最大数,然后就十分简单了,取$a$为最大数,$b$为另一个数,$c$取1即可 =====B Restore the Permutation by Merger===== 题意:将两个排列合并在一起(可穿插),给合并后的序列,问原排列是什么样。 题解:是排列,则每个数至多出现1次,枚举每个数,这个数第二次出现时候直接输出即可。 =====C Make It Good===== 题意:要将一个序列通过移走一系列前缀变成一个$good string$,一个$good string$定义为可经行如下操作成为空串:每次从串头或者串尾拿走一个数放入一个新序列,最后这个新序列可以成为一个不下降序列。 题解:看了题目里的描述就会明白,目标串就是一个山坡状起伏的串,先上升再下降,从后往前找第二个$a_{i+1}>来维护每个点的叶节点和与之相连的所有点即可,要注意这个过程中还要维护普通点在删边过程中会向叶节点转换。 =====G Columns Swaps===== 题解:给定两排数,每排都有$n$个数,每次操作可以交换一列的两个数,问能否存在一个最少的交换方案,使操作之后每一行都是$1$到$n$的一个排列。 题解:这题有点难想,大致是一个二分图的问题。首先遍历两行数,如果一个数的出现次数超过了2次,那么肯定不成立。如果所有数出现次数都是两次,那么一定有一种方案满足。现定四个数组$r1[n],r2[n],b1[n],b2[n],b$数组用于存放列数,$r$数组用于存放行数,如果对于一个数$i$,$b_{1i}=b_{2i}$,则不考虑这个点,因为肯定不会动这个点的。接下来对点染色,如果$b_{1i}≠b_{2i}$,考虑$r$数组,如果$r_{1i}≠r_{2i}$,则在$b_{1i}$和$b_{2i}$之间连一条权为0的边表示,两点染的色必须相同。反之,连一条权为$1$的边,表示两个点颜色相反,最后从每个点开始$dfs$经行染色即可,注意每次比对将开头的那个点染成$1$还是$0$,最后的结果会最优(即最少)。