CF2173E Shiro's Mirror Duel
题目描述
这个世界上没有所谓的幸运。胜者在游戏开始前就已经决定了。
——《NO GAME NO LIFE》
这是一个交互题。
有一天,空与白又感到无聊,于是他们决定用一场游戏来解决。
一开始,空给白一个长度为 $n$ 的排列 $p_1, p_2, \ldots, p_n$。每进行一次操作,白可以选择两个不同的下标 $x$ 和 $y$($1 \leq x \neq y \leq n$)。然后空会抛一枚公正的硬币:
- 有 $0.5$ 的概率,空会交换 $p_x$ 和 $p_y$;
- 有 $0.5$ 的概率,空会交换 $p_{n-x+1}$ 和 $p_{n-y+1}$。
操作后,空会回复实际被交换的下标对,使白可以相应地更新自己的排列。
白的目标是在不超过 $\lfloor 2.5n+800\rfloor$ 次操作内,将排列 $p$ 升序排序。请你帮助她达成目标!
$^{\ast}$ 长度为 $n$ 的排列是指包含 $n$ 个从 $1$ 到 $n$ 的不同整数的数组。例如,$[2,3,1,5,4]$ 是一个排列,$[1,2,2]$ 不是(因为 $2$ 出现了两次),$[1,3,4]$ 也不是(因为 $n=3$ 但出现了 $4$)。
输入格式
每个测试包含多组数据。第一行包含测试数据组数 $t$($1 \leq t \leq 100$)。每组测试数据描述如下:
每组测试的第一行包含一个整数 $n$($1 \leq n \leq 4000$),表示排列 $p$ 的长度。
第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$,表示排列 $p$ 的元素。
保证所有测试数据中 $\sum n \leq 2\cdot 10^4$。
保证本题共有 50 组测试数据。
输出格式
(交互题,具体细节请参考题面或平台说明。)
说明/提示
在第一个测试用例中,$n=5$,初始排列是 $[5,1,3,4,2]$。
- 我们输出 ? 1 5,裁判回复 1 5,表示 $1$ 和 $5$ 这两个位置的元素被交换(没有反射)。此时数组变为 $[2,1,3,4,5]$。
- 我们输出 ? 4 5,裁判回复 2 1,这实际上是我们选的 ${4,5}$ 的“镜像”,因为 $n=5$,所以 $n-4+1=2$,$n-5+1=1$,我们就需要交换第 $2$、$1$ 位元素。数组变为 $[1,2,3,4,5]$。
- 现在排列已经有序,所以我们输出 !。这行输出不计入操作次数限制。
在第二个测试用例中,给定的排列本身就是升序排列,仅需输出 !。
由 ChatGPT 5 翻译