#P17123. [ICPC 2025 Shanghai R] Singularity
[ICPC 2025 Shanghai R] Singularity
背景
试题来自 清华大学学生算法协会。
题目描述
在 年,出题变得十分简单。机器人会随机设定一些操作来生成一道题目,然后将其解决。出题人只需要检查题目是否正确即可。
下面是一道来自 年的题目:
给定一个排列 ,保证 是偶数。你希望仅使用一种操作来将这个排列排序:
FakeSort(l, r):你必须保证 是偶数。令 ,则连续子序列 中最大的 个元素和最小的 个元素将被各自独立排序。具体而言,设 为最大的 个数的下标, 为最小的 个数的下标。我们首先将下标 上的数排序,然后将下标 上的数排序。
下面是一个具体例子:假设排列为 。若调用 FakeSort(2,7):
- 。连续子序列 为 ;我们将分别对该序列中最大的 个数和最小的 个数进行排序。
- $p = \{2, 5, \textbf{7}, 1, \textbf{8}, \textbf{6}, 4, 3\}$;最大的 个数以粗体标出。排序后变为 $p = \{2, 5, \textbf{6}, 1, \textbf{7}, \textbf{8}, 4, 3\}$。
- $p = \{2, \textbf{5}, 6, \textbf{1}, 7, 8, \textbf{4}, 3\}$;最小的 个数以粗体标出。排序后变为 $p = \{2, \textbf{1}, 6, \textbf{4}, 7, 8, \textbf{5}, 3\}$。
因此 经过 FakeSort(2,7) 后变为 。
请使用不超过 次操作将排列排序,或判定这不可能。可以证明,如果一个排列能通过该操作排序,则一定存在一种使用不超过 次操作的方法。
输入格式
输入包含多组测试用例。第一行包含一个整数 (),表示测试用例的数量。
对于每组测试用例,第一行包含一个偶数 (),表示排列的长度。
第二行包含 个整数 (),即你需要排序的排列。保证 是一个排列。
保证所有测试用例的 之和不超过 。
输出格式
对于每组测试用例,如果无法将排列排序,输出 -1。
否则,输出一个整数 (),表示使用的操作次数。
接下来的 行,每行输出 (, 为偶数),表示执行 FakeSort(l, r)。
3
4
2 1 4 3
6
3 6 5 1 2 4
8
3 2 1 7 5 4 6 8
1
1 4
-1
2
4 7
1 6
提示
翻译由 DeepSeek V4 Pro 完成