CF1579B.Shifting Sort

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

Shifting Sort

题目描述

新一代外部存储器包含一个整数数组 a[1n]=[a1,a2,,an] a[1 \ldots n] = [a_1, a_2, \ldots, a_n]

这种存储器不支持更改任意元素的值。相反,它允许你从给定数组中剪切出任意一段,按任意偏移量进行循环移动(旋转),然后插入回原来的位置。

从技术上讲,每次循环移位都由两个连续的动作组成:

  1. 您可以选择任意下标 l l r r 1l<rn 1 \le l < r \le n )作为线段的边界。
  2. 然后用任意偏移量 d d 来替换线段 a[lr] a[l \ldots r] ,使其向左循环移动。循环移动的概念也可以用下面的关系来解释:序列 [1,4,1,3] [1, 4, 1, 3] 是序列 [3,1,4,1] [3, 1, 4, 1] 向左偏移偏移量 1 1 的循环移动,序列 [4,1,3,1] [4, 1, 3, 1] 是序列 [3,1,4,1] [3, 1, 4, 1] 向左偏移偏移量 2 2 的循环移动。

例如,如果 a=[1,3,2,8,5] a = [1, \color{blue}{3, 2, 8}, 5] ,那么选择 l=2 l = 2 , r=4 r = 4 d=2 d = 2 就会得到一个线段 a[24]=[3,2,8] a[2 \ldots 4] = [3, 2, 8] 。 然后这个线段通过偏移 d=2 d = 2 向左移动,就会得到一个线段 [8,3,2] [8, 3, 2] ,这个线段就取代了线段的原始元素。最后得到 a=[1,8,3,2,5] a = [1, \color{blue}{8, 3, 2}, 5]

对给定数组 a a 进行排序,每次循环移动不超过 n n 。请注意,您不需要尽量减少循环移动的次数。任何需要 n n 或更少的循环移动的方法都会被接受。

输入格式

第一行包含一个整数 t t 1t1000 1 \leq t \leq 1000 )——测试用例数。

接下来的 2t 2t 行包含测试用例的描述。

每个测试用例描述的第一行包含一个整数 n n 2n50 2 \leq n \leq 50 )—— 数组的长度。第二行由空格分隔的数组元素 ai a_i 109ai109 -10^9 \leq a_i \leq 10^9 )组成。数组 a a 中的元素可以重复,不一定是唯一的。

输出格式

输出 tt 个测试用例的答案。

每个测试用例答案的第一行应该包含一个整数 k k 0kn 0 \le k \le n )—— 对数组进行排序的操作数。接下来的 k k 行应该包含动作描述,格式为 l r d,其中 l l r r 1l<rn 1 \le l < r \le n )是被移动段的边界,而 d d 1drl 1 \le d \le r - l )是偏移值。请记住,只考虑向左的循环移动,因此所选的线段将通过偏移 d d 向左移动。

请注意,您不需要找到排序所需的最小循环移动次数。任何移位次数不超过 n n 的排序方法都可以接受。

如果给定数组 a a 已经排序,其中一个可能的答案是 k=0 k = 0 和一个空的循环移位序列。

如果有多个可能的答案,可以打印任意一个。

说明/提示

解释示例中的第四组数据:

  1. 选中线段 a[24] a[2 \ldots 4] 并向左移动 2 2 : $[2, {\color{blue}{5, 1, 4}}, 3] \longrightarrow [2, {\color{blue}{4, 5, 1}}, 3]$;
  2. 然后选择线段 a[15] a[1 \ldots 5] 并向左移动 3 3 : $[{\color{blue}{2, 4, 5, 1, 3}}] \longrightarrow [{\color{blue}{1, 3, 2, 4, 5}}]$;
  3. 之后,选中线段 a[12] a[1 \ldots 2] ,并向左移动 1 1 :$[{\color{blue}{1, 3}}, 2, 4, 5] \longrightarrow [{\color{blue}{3, 1}}, 2, 4, 5]$;
  4. 最后,线段 a[13] a[1 \ldots 3] 被选中并向左移动了 1 1 : $[{\color{blue}{3, 1, 2}}, 4, 5] \longrightarrow [{\color{blue}{1, 2, 3}}, 4, 5]$。

样例

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

在线编程 IDE

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