CF1787F - Inverse Transformation 题解
题意简化
*2500
对于一个排列,每天会将其
题解
操作比较抽象,手动刻画一下。
对于一个原轮换,一次操作后
规律性非常强,进一步的,我们有以下两个结论:
- 对于置换
(a_1~a_2~\cdots~a_n) ,若n 为偶数,则该置换进行一步变换后会变成(a_1~a_3~\cdots~a_{n-1})(a_2~a_4~\cdots~a_n) 。 - 对于置换
(a_1~a_2~\cdots~a_n) ,若n 为奇数,则该置换进行一步变换后会变成(a_1~a_3~\cdots~a_n~a_2~\cdots~a_{n-1}) 。
不难发现长度为奇数的轮换长度不会改变,长度为偶数的会被一直除
原题是给定最后的结果,要求反推
感觉就不用多说了,先把结果的排列分解成若干个轮换,然后挑选两个大小相等的轮换合并。
还要考虑无解的情况。对于结果排列,如果存在一个长度为偶数的轮换,则前
考虑掉上面这个情况后,剩下的轮换我们按长度分类,统计长度相同的轮换数量。显然问题变成对其分组,并且每组的大小都要是
把数量拆分为两部分考虑,对于小于等于
对于分到一组的轮换,随便钦定一个顺序轮流放即可,正确性显然。
总时间复杂度