atcoder#ARC110F. [ARC110F] Esoswap

[ARC110F] Esoswap

题目描述

0, 1, , N  1 0,\ 1,\ \ldots,\ N\ -\ 1 を並び替えた数列 P = P0, P1, , PN  1 P\ =\ P_0,\ P_1,\ \ldots,\ P_{N\ -\ 1} があります。

あなたは P P に対して、以下の操作を最大 2 × 105 2\ \times\ 10^5 回まで行うことができます。

  • 整数 i   (0  i  N  1) i\ ~\ (0\ \leq\ i\ \leq\ N\ -\ 1) を宣言する。Pi P_i P(i + Pi)  mod  N P_{(i\ +\ P_i)\ \textrm{\ mod\ }\ N} を入れ替える

適切に操作を行うことで、P P を昇順に並び替えてください。もしそれが不可能な場合、-1 を出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N P0 P_0 P1 P_1 \ldots PN  1 P_{N\ -\ 1}

输出格式

2 × 105 2\ \times\ 10^5 回以下の操作で P P を昇順に並び替えることが不可能な場合、-1 を出力せよ。

2 × 105 2\ \times\ 10^5 回以下の操作で P P を昇順に並び替えることが可能な場合、K K 回操作を行うとして、以下の形式で K + 1 K\ +\ 1 行出力せよ。

  • 1 1 行目は整数 K K
  • 1 + i (1  i  K) 1\ +\ i~(1\ \leq\ i\ \leq\ K) 行目は、i i 回目の操作で宣言する整数 j   (0  j  N  1) j\ ~\ (0\ \leq\ j\ \leq\ N\ -\ 1)

操作回数を最小化する必要はない。 また、2 × 105 2\ \times\ 10^5 回以下の操作で P P を昇順に並び替える操作列が複数存在する場合、どれを出力しても構わない。

题目大意

翻译:

给出一个整数 N(2N100)N(2\leq N\leq 100) 和一个从 00 开始的长度为 NN 的排列 P=P0,P1,P2PN1P=P_0,P_1,P_2\cdots P_{N-1},你可以进行以下操作:

  • 选择一个整数 i(0iN1)i(0\leq i \leq N-1)
  • 交换当前数列上的 PiP_{i}P(i + Pi)  mod  NP_{(i\ +\ P_i)\ \textrm{\ mod\ }\ N} 两个位置上的数字。

求能否在 2×1052\times 10^5 之内构造出一种操作方案使得整个序列单调上升,如果有,则在第一行输出操作个数 KK,接下来 KK 行,每行按顺序输出数列操作的位置 ii,若没有,则输出 1-1

样例解释:

原序列为 712640537,1,2,6,4,0,5,3

我们可以进行 44 次操作:

  • 对位置 66 进行操作则交换 P6 (=5)P_6\ (=5)P(6+5)mod8=P3 (=6)P_{(6+5)\mod 8}=P_3\ (=6) 两个数则此时序列变为 7,1,2,5,4,0,6,37, 1, 2, 5, 4, 0, 6, 3
  • 对位置 00 进行操作则交换 P0 (=7)P_0\ (=7)P(0+7)mod8=P7 (=3)P_{(0+7)\mod 8}=P_7\ (=3) 两个数则此时序列变为 3,1,2,5,4,0,6,73, 1, 2, 5, 4, 0, 6, 7
  • 对位置 33 进行操作则交换 P3 (=5)P_3\ (=5)P(3+5)mod8=P0 (=3)P_{(3+5)\mod 8}=P_0\ (=3) 两个数则此时序列变为 5,1,2,3,4,0,6,75, 1, 2, 3, 4, 0, 6, 7
  • 对位置 00 进行操作则交换 P0 (=5)P_0\ (=5)P(0+5)mod8=P5 (=0)P_{(0+5)\mod 8}=P_5\ (=0) 两个数则此时序列变为 0,1,2,3,4,5,6,70, 1, 2, 3, 4, 5, 6, 7,此时该数列有序。
8
7 1 2 6 4 0 5 3
4
6
0
3
0

提示

制約

  • 入力は全て整数
  • 2  N  100 2\ \leq\ N\ \leq\ 100
  • P P 0, 1, , N  1 0,\ 1,\ \ldots,\ N\ -\ 1 を並び替えた数列

Sample Explanation 1

この操作列は、以下のように P P を昇順に並び替えます。 - まず i i として 6 6 を宣言し、P6 (= 5) P_6\ (=\ 5) と $ P_{(6\ +\ 5)\ \textrm{\ mod\ }\ 8}\ =\ P_3\ (=\ 6) $ を入れ替える。P P 7, 1, 2, 5, 4, 0, 6, 3 7,\ 1,\ 2,\ 5,\ 4,\ 0,\ 6,\ 3 になる - 次に i i として 0 0 を宣言し、P0 (= 7) P_0\ (=\ 7) と $ P_{(0\ +\ 7)\ \textrm{\ mod\ }\ 8}\ =\ P_7\ (=\ 3) $ を入れ替える。P P 3, 1, 2, 5, 4, 0, 6, 7 3,\ 1,\ 2,\ 5,\ 4,\ 0,\ 6,\ 7 になる - 次に i i として 3 3 を宣言し、P3 (= 5) P_3\ (=\ 5) と $ P_{(3\ +\ 5)\ \textrm{\ mod\ }\ 8}\ =\ P_0\ (=\ 3) $ を入れ替える。P P 5, 1, 2, 3, 4, 0, 6, 7 5,\ 1,\ 2,\ 3,\ 4,\ 0,\ 6,\ 7 になる - 次に i i として 0 0 を宣言し、P0 (= 5) P_0\ (=\ 5) と $ P_{(0\ +\ 5)\ \textrm{\ mod\ }\ 8}\ =\ P_5\ (=\ 0) $ を入れ替える。P P 0, 1, 2, 3, 4, 5, 6, 7 0,\ 1,\ 2,\ 3,\ 4,\ 5,\ 6,\ 7 になる