AT_arc110_f [ARC110F] Esoswap
题目描述
有一个由 $0, 1, \ldots, N-1$ 组成并被打乱顺序的数列 $P = P_0, P_1, \ldots, P_{N-1}$。
你可以对 $P$ 最多进行 $2 \times 10^5$ 次如下操作:
- 声明一个整数 $i~(0 \leq i \leq N-1)$,将 $P_i$ 与 $P_{(i + P_i)\ \textrm{mod}\ N}$ 交换。
请通过适当的操作,将 $P$ 排成升序。如果无法做到,请输出 `-1`。
输入格式
输入通过标准输入按以下格式给出:
> $N$ $P_0$ $P_1$ $\ldots$ $P_{N-1}$
输出格式
如果无法在 $2 \times 10^5$ 次操作内将 $P$ 排成升序,请输出 `-1`。
如果可以在 $2 \times 10^5$ 次操作内将 $P$ 排成升序,假设共操作 $K$ 次,请按以下格式输出 $K+1$ 行:
- 第 $1$ 行输出整数 $K$。
- 第 $1+i~(1 \leq i \leq K)$ 行输出第 $i$ 次操作声明的整数 $j~(0 \leq j \leq N-1)$。
不要求操作次数最小。如果存在多种可行的操作序列,只需输出其中一种即可。
说明/提示
### 限制条件
- 所有输入均为整数。
- $2 \leq N \leq 100$。
- $P$ 是 $0, 1, \ldots, N-1$ 的一个排列。
### 样例解释 1
以下操作序列可以将 $P$ 排成升序:
- 首先声明 $i=6$,交换 $P_6(=5)$ 和 $P_{(6+5)\ \textrm{mod}\ 8}=P_3(=6)$,此时 $P$ 变为 $7, 1, 2, 5, 4, 0, 6, 3$。
- 然后声明 $i=0$,交换 $P_0(=7)$ 和 $P_{(0+7)\ \textrm{mod}\ 8}=P_7(=3)$,此时 $P$ 变为 $3, 1, 2, 5, 4, 0, 6, 7$。
- 然后声明 $i=3$,交换 $P_3(=5)$ 和 $P_{(3+5)\ \textrm{mod}\ 8}=P_0(=3)$,此时 $P$ 变为 $5, 1, 2, 3, 4, 0, 6, 7$。
- 然后声明 $i=0$,交换 $P_0(=5)$ 和 $P_{(0+5)\ \textrm{mod}\ 8}=P_5(=0)$,此时 $P$ 变为 $0, 1, 2, 3, 4, 5, 6, 7$。
由 ChatGPT 4.1 翻译