题目描述
0, 1, …, N − 1 を並び替えた数列 P = P0, P1, …, PN − 1 があります。
あなたは P に対して、以下の操作を最大 2 × 105 回まで行うことができます。
- 整数 i (0 ≤ i ≤ N − 1) を宣言する。Pi と P(i + Pi) mod N を入れ替える
適切に操作を行うことで、P を昇順に並び替えてください。もしそれが不可能な場合、-1
を出力してください。
输入格式
入力は以下の形式で標準入力から与えられる。
N P0 P1 … PN − 1
输出格式
2 × 105 回以下の操作で P を昇順に並び替えることが不可能な場合、-1
を出力せよ。
2 × 105 回以下の操作で P を昇順に並び替えることが可能な場合、K 回操作を行うとして、以下の形式で K + 1 行出力せよ。
- 1 行目は整数 K
- 1 + i (1 ≤ i ≤ K) 行目は、i 回目の操作で宣言する整数 j (0 ≤ j ≤ N − 1)
操作回数を最小化する必要はない。 また、2 × 105 回以下の操作で P を昇順に並び替える操作列が複数存在する場合、どれを出力しても構わない。
题目大意
翻译:
给出一个整数 N(2≤N≤100) 和一个从 0 开始的长度为 N 的排列 P=P0,P1,P2⋯PN−1,你可以进行以下操作:
- 选择一个整数 i(0≤i≤N−1)。
- 交换当前数列上的 Pi 与 P(i + Pi) mod N 两个位置上的数字。
求能否在 2×105 之内构造出一种操作方案使得整个序列单调上升,如果有,则在第一行输出操作个数 K,接下来 K 行,每行按顺序输出数列操作的位置 i,若没有,则输出 −1。
样例解释:
原序列为 7,1,2,6,4,0,5,3
我们可以进行 4 次操作:
- 对位置 6 进行操作则交换 P6 (=5) 和 P(6+5)mod8=P3 (=6) 两个数则此时序列变为 7,1,2,5,4,0,6,3
- 对位置 0 进行操作则交换 P0 (=7) 和 P(0+7)mod8=P7 (=3) 两个数则此时序列变为 3,1,2,5,4,0,6,7
- 对位置 3 进行操作则交换 P3 (=5) 和 P(3+5)mod8=P0 (=3) 两个数则此时序列变为 5,1,2,3,4,0,6,7
- 对位置 0 进行操作则交换 P0 (=5) 和 P(0+5)mod8=P5 (=0) 两个数则此时序列变为 0,1,2,3,4,5,6,7,此时该数列有序。
8
7 1 2 6 4 0 5 3
4
6
0
3
0
提示
制約
- 入力は全て整数
- 2 ≤ N ≤ 100
- P は 0, 1, …, N − 1 を並び替えた数列
Sample Explanation 1
この操作列は、以下のように P を昇順に並び替えます。 - まず i として 6 を宣言し、P6 (= 5) と $ P_{(6\ +\ 5)\ \textrm{\ mod\ }\ 8}\ =\ P_3\ (=\ 6) $ を入れ替える。P は 7, 1, 2, 5, 4, 0, 6, 3 になる - 次に i として 0 を宣言し、P0 (= 7) と $ P_{(0\ +\ 7)\ \textrm{\ mod\ }\ 8}\ =\ P_7\ (=\ 3) $ を入れ替える。P は 3, 1, 2, 5, 4, 0, 6, 7 になる - 次に i として 3 を宣言し、P3 (= 5) と $ P_{(3\ +\ 5)\ \textrm{\ mod\ }\ 8}\ =\ P_0\ (=\ 3) $ を入れ替える。P は 5, 1, 2, 3, 4, 0, 6, 7 になる - 次に i として 0 を宣言し、P0 (= 5) と $ P_{(0\ +\ 5)\ \textrm{\ mod\ }\ 8}\ =\ P_5\ (=\ 0) $ を入れ替える。P は 0, 1, 2, 3, 4, 5, 6, 7 になる