#P13265. [GCJ 2014 Finals] Power Swapper
[GCJ 2014 Finals] Power Swapper
Description
在一个平行宇宙里,人们痴迷于使用 的幂次方,并且他们为从 到 的数列定义了一种激动人心的排序方式。这里定义的交换操作如下:
- 一段可交换的区间是指一个长度为 的连续区间,并且其起始位置(从 开始计数)必须是 的倍数。
- 一次合法的 级交换操作是指交换两个不同的、各自合法的长度为 的区间。
为了将一个给定的排列排序为升序排列,你最多可以对每个 使用一次这样的交换操作。注意,不允许交换一个区间与其自身。
例如,对于排列 (即 到 的一个排列),可以按如下步骤排序:
- :执行一次 size-2 的交换,交换区间 与 。
- :执行一次 size-0 的交换,交换 和 。
- :执行一次 size-1 的交换,交换 与 。
- :排序完成。
上面每一种 size 的交换操作最多只使用了一次。同时,每次交换都满足合法性:两个长度为 的区间起始位置均为 的倍数。
现在请你计算,将给定排列按上述规则排序,有多少种不同的方式?每一种方式是一个有序的交换序列,只有当两种方式的交换序列完全一致时,才认为它们相同。
Input Format
输入的第一行是测试用例数 。接下来是 个测试用例。
每个测试用例的第一行是一个整数 ,表示排列的大小为 。
下一行是 个用空格分隔的整数,表示一个 到 的排列。
Output Format
对于每个测试用例,输出一行,格式为 "Case #x: y",其中 是测试用例编号(从 开始), 是将给定排列按题目要求排序的不同方法数。
4
1
2 1
2
1 4 3 2
3
7 8 5 6 1 2 4 3
2
4 3 2 1
Case #1: 1
Case #2: 3
Case #3: 6
Case #4: 0
Hint
限制条件
Small 数据集(4 分)
- 时间限制:
603 秒
Large 数据集(12 分)
- 时间限制:
1205 秒
翻译由 ChatGPT-4o 完成
京公网安备 11011102002149号