LGP3322口胡
作者:互联网
首先可以观察得到两个结论:
- 交换两个操作的操作顺序不会影响操作序列是否合法。
显然是正确的,模拟一下即可。
- 任意操作序列无法使序列变回原本的序列。
考虑最长的操作和别的所有的操作,区间长度不相同,因此一定有元素被 swap 了。
以上两点告诉我们,答案只有一种,只需要求出操作数量然后阶乘即可。
因为第一个结论的存在所以我们可以从操作长度从小往大考虑。
考虑正在执行第 \(i\) 次操作,将序列划分为 \(2^{n-i+1}\) 段后,若满足段内元素 \(\gcd(|k-p[k]|)=2^{i-1}\) 的段的数量不为 \(2\) 则一定无解(后面的操作无法改变多余的段,如果只有一段则交换操作无效),否则交换这两段即可。
复杂度 \(O(n\log n)\)。
标签:交换,即可,长度,序列,操作,考虑,LGP3322 来源: https://www.cnblogs.com/lmpp/p/16516180.html