#P15576. [USACO26FEB] Good Cyclic Shifts G

    ID: 15513 远端评测题 2000ms 256MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>线段树USACO树状数组前缀和差分2026

[USACO26FEB] Good Cyclic Shifts G

说明

对于一个 1N1\dots N 的排列 p1,p2,,pNp_1,p_2,\dots,p_N1N21051\le N\le 2\cdot 10^5),定义 f(p)=i=1Npii2f(p)=\sum_{i=1}^N \frac{|p_i-i|}{2}。如果一个排列能够通过至多 f(p)f(p) 次相邻元素交换变为 pi=ip_i=i(恒等排列,identity permutation)的排列,则称该排列是 好的

给定一个排列,找出它的哪些循环移位是好的。

输入格式

输入包含 TT1T1051\le T\le 10^5)个独立的测试用例。每个测试用例的格式如下:

第一行包含 NN

第二行包含 p1,p2,,pNp_1,p_2,\dots,p_N1piN1\le p_i\le N),保证是 1N1\dots N 的一个排列。

保证所有测试用例的 NN 之和不超过 10610^6

输出格式

对于每个测试用例,输出两行:

第一行输出好的循环移位的数量 kk

然后输出一行,包含 kk 个按升序排列的整数 ss0s<N0\le s<N),表示将 pp 向右循环移位 ss 次后得到的排列是好的。

3
5
5 4 3 2 1
4
1 2 4 3
5
1 2 3 4 5
0

2
0 1
5
0 1 2 3 4

提示

考虑第二个测试用例,其中 p=[1,2,4,3]p = [1, 2, 4, 3]

  • $f(p) = (|1 - 1| + |2 - 2| + |4 - 3| + |3 - 4|) / 2 = 1$。因为 pp 可以通过交换 p3p_3p4p_4 一次操作变为恒等排列,所以 pp 是好的。
  • pp 向右循环移位 11 次,得到 q=[3,1,2,4]q = [3, 1, 2, 4]。$f(q) = (|3 - 1| + |1 - 2| + |2 - 3| + |4 - 4|) / 2 = 2$。因为 qq 可以通过将 q1q_1 向前交换两步变为恒等排列,所以 qq 是好的。 可以看出另外两个循环移位不是好的。

评分标准

  • 输入 2:N10N\le 10
  • 输入 3-5:T10,N2000T\le 10, N\le 2000
  • 输入 6-11:无额外限制。

题目来源:Akshaj Arora

翻译由 DeepSeek 完成