CF715E Complete the Permutations
题意:定义两个排列的距离为:让两个排列变得相同,在第一个上所需交换的次数。
现在给出两个长度为
答案对
发现自己对于输入大于
先考虑两个已经确定的排列之间的距离。
结论:视作置换,
即为距离。 证明:
构造:只要把每个环适当旋转一步,就能得到正确的排列。而旋转一个大小为
的环只需要 次交换(对单个环达到下界),总交换次数就是 。 下界:可以证明,跨越两个环的交换是不优的,因为这打破了环的封闭性。
在一个不确定的置换中,我们会产生
- ①
- ②
- ③
- ④
对于第一种,我们可以简单地把标号传递(可以使用并查集),然后忽略这些边。如果已经形成环就记下。
此外,如果一组
记处理后 ②③④ 三种链的个数分别为
我们以三步将不完整的置换填写为完整的置换:
将所有 ② 类链连接成环,或转化为其他类型的链。
将所有 ③ 类链连接成环,或转化为其他类型的链。
将所有 ④ 连接成环。
此外,还要考虑成环的总个数,若成
观察发现,
而
所以,只要
而 ②③ 类边之间不会转化,这就说明三步之间是独立的。分别考虑三步的幂级数。
这转化是有讲究的,我们不能再形成环,又要不留 ② 类边,只能串成若干条以
对于第一条待处理的 ② 类边,有
连完之后就会消失,所以下一条边少了一种方案,呈现出来就是下降幂。
考虑 ③ 类边内部获得
最后考虑 ④ 类边内部获得
把三个数组卷积即可。
此题的