AT_arc110_f.[ARC110F] Esoswap

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有一个由 0,1,…,N−10, 1, \ldots, N-1 组成并被打乱顺序的数列 P=P0,P1,…,PN−1P = P_0, P_1, \ldots, P_{N-1}。

你可以对 PP 最多进行 2×1052 \times 10^5 次如下操作:

  • 声明一个整数 i (0≤i≤N−1)i~(0 \leq i \leq N-1),将 PiP_i 与 P(i+Pi) mod NP_{(i + P_i)\ \textrm{mod}\ N} 交换。

请通过适当的操作,将 PP 排成升序。如果无法做到,请输出 -1。

输入格式

输入通过标准输入按以下格式给出:

NN P0P_0 P1P_1 …\ldots PN−1P_{N-1}

输出格式

如果无法在 2×1052 \times 10^5 次操作内将 PP 排成升序,请输出 -1。

如果可以在 2×1052 \times 10^5 次操作内将 PP 排成升序,假设共操作 KK 次,请按以下格式输出 K+1K+1 行:

  • 第 11 行输出整数 KK。
  • 第 1+i (1≤i≤K)1+i~(1 \leq i \leq K) 行输出第 ii 次操作声明的整数 j (0≤j≤N−1)j~(0 \leq j \leq N-1)。

不要求操作次数最小。如果存在多种可行的操作序列,只需输出其中一种即可。

输入输出样例

  • 输入#1

    8
    7 1 2 6 4 0 5 3

    输出#1

    4
    6
    0
    3
    0

说明/提示

限制条件

  • 所有输入均为整数。
  • 2≤N≤1002 \leq N \leq 100。
  • PP 是 0,1,…,N−10, 1, \ldots, N-1 的一个排列。

样例解释 1

以下操作序列可以将 PP 排成升序:

  • 首先声明 i=6i=6,交换 P6(=5)P_6(=5) 和 P(6+5) mod 8=P3(=6)P_{(6+5)\ \textrm{mod}\ 8}=P_3(=6),此时 PP 变为 7,1,2,5,4,0,6,37, 1, 2, 5, 4, 0, 6, 3。
  • 然后声明 i=0i=0,交换 P0(=7)P_0(=7) 和 P(0+7) mod 8=P7(=3)P_{(0+7)\ \textrm{mod}\ 8}=P_7(=3),此时 PP 变为 3,1,2,5,4,0,6,73, 1, 2, 5, 4, 0, 6, 7。
  • 然后声明 i=3i=3,交换 P3(=5)P_3(=5) 和 P(3+5) mod 8=P0(=3)P_{(3+5)\ \textrm{mod}\ 8}=P_0(=3),此时 PP 变为 5,1,2,3,4,0,6,75, 1, 2, 3, 4, 0, 6, 7。
  • 然后声明 i=0i=0,交换 P0(=5)P_0(=5) 和 P(0+5) mod 8=P5(=0)P_{(0+5)\ \textrm{mod}\ 8}=P_5(=0),此时 PP 变为 0,1,2,3,4,5,6,70, 1, 2, 3, 4, 5, 6, 7。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页