一、题目
二、解法
首先考虑操作顺序对答案的影响:
举个例子:1 2 3 4 5 6 7 8,现在有长度 2 2 2和 4 4 4的两种交换方式。
第一种方案,先用 2 2 2:5 6 3 4 1 2 7 8,再用 4 4 4:1 2 7 8 5 6 3 4
第二种方案,先用 4 4 4:5 6 7 8 1 2 3 4,再用 2 2 2:1 2 7 8 5 6 3 4
不难发现只要一个从小到大(指影响的长度),个数为 x x x的操作序列合法,那么有与之对应的 x ! x! x!种不考虑顺序的操作方法均能合法。这个结论应该是很容易理解的,这给我们一个启发:我们操作顺序只需要从小到大地考虑。
假如当前我们需要使用 l l l长度的交换,那么我们必须要解决以后不能解决的问题,因为长度是越来越大的。我们可以按 2 l 2l 2l把原序列分段,每个段内需要保证段首是 2 l 2l 2l的倍数并且 a [ t ] + l = a [ t + l ] a[t]+l=a[t+l] a