CF1828B.Permutation Swap

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Permutation Swap

题目描述

给定一个未排序的排列 p1,p2,,pnp_1, p_2, \ldots, p_n。为了将该排列排序,你可以选择一个常数 kkk1k \ge 1),并对排列进行若干操作。每次操作,你可以选择两个整数 iijj1j<in1 \le j < i \le n),且满足 ij=ki - j = k,然后交换 pip_ipjp_j

你能选择的、能够将给定排列排序的最大 kk 是多少?

排列是一个长度为 nn 的数组,包含 11nnnn 个互不相同的整数,顺序任意。例如,[2,3,1,5,4][2, 3, 1, 5, 4] 是一个排列,但 [1,2,2][1, 2, 2] 不是排列(22 出现了两次),[1,3,4][1, 3, 4] 也不是排列(n=3n = 3,但数组中有 44)。

未排序的排列 pp 指的是存在至少一个位置 ii 满足 piip_i \ne i

输入格式

每个测试点包含多组测试数据。第一行为测试用例数 tt1t1041 \le t \le 10^4)。接下来是每组测试数据的描述。

每组测试数据的第一行包含一个整数 nn2n1052 \le n \le 10^{5}),表示排列 pp 的长度。

第二行包含 nn 个互不相同的整数 p1,p2,,pnp_1, p_2, \ldots, p_n1pin1 \le p_i \le n),表示排列 pp。保证给定的数构成一个长度为 nn 的排列,且该排列未排序。

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^{5}

输出格式

对于每组测试数据,输出一个整数,表示你能选择的、能够将给定排列排序的最大 kk

可以证明答案总是存在。

说明/提示

在第一个测试用例中,你能选择的最大 kk11。排序操作如下:

  • 交换 p2p_2p1p_121=12 - 1 = 1\rightarrow p=[1,3,2]p = [1, 3, 2]
  • 交换 p2p_2p3p_332=13 - 2 = 1\rightarrow p=[1,2,3]p = [1, 2, 3]

在第二个测试用例中,你能选择的最大 kk22。排序操作如下:

  • 交换 p3p_3p1p_131=23 - 1 = 2\rightarrow p=[1,4,3,2]p = [1, 4, 3, 2]
  • 交换 p4p_4p2p_242=24 - 2 = 2\rightarrow p=[1,2,3,4]p = [1, 2, 3, 4]

由 ChatGPT 4.1 翻译

样例

7
3
3 1 2
4
3 4 1 2
7
4 2 6 7 5 3 1
9
1 6 7 4 9 2 3 8 5
6
1 5 3 4 2 6
10
3 10 5 2 9 6 7 8 1 4
11
1 11 6 4 8 3 7 5 9 10 2
1
2
3
4
3
2
3

在线编程 IDE

建议全屏模式获得最佳体验