2020暑假集训博客
7.16
关于置换群题目:
首先介绍一下什么是置换群,不说一些繁琐的概念。
首先给你一个序列,假如:
s = {1 2 3 4 5 6}
然后给你一个变换规则
t = {6 3 4 2 1 5}
就是每一次按照t规则变换下去
比如这样
第一次:6 3 4 2 1 5
第二次:5 4 2 3 6 1
第三次:1 2 3 4 5 6
发现经过几次会变换回去,在变换下去就是循环的了,这就是一个置换群。
我们可以这样表示一个置换群,比如按照上面变化规则
1->6->5->1 那么这些是一个轮换
2->3->4->2 这些是一个轮换
所以可以写为
t = { {1 6 5},{ 2 3 4 } } (引用自 https://blog.csdn.net/y990041769/article/details/45172095)
如果给你一个置换后的数组,可以直接按照现在数组情况开始寻找轮换,那上面第二次举例,第二个数字4开始找,4本身算一个,然后寻找下标为4数组里面的内容,里面是3,继续找下标3的数组内容,里面是2,继续找,找到了4,这3个数字就构成了一个轮换。
然后现在给出的数组可能是初始数组置换k次的结果,若k是质数的话(保证有解),设现在是P,原来置换数组是B,初始数组是A,AB的k次方是P,存在一个数字x,设某个轮换长度是r,xk%r=0,(x!=0) 就是说再次对B置换x次后这个轮换回到原始状态,就是A的情况,就可以复原数组A,如果x*k%r=1,那么再次置换x次就可以得到与第一次置换相同的结果,那么这个结果就是置换数组自己。