H1. 酷炫交换行走(简单版)
每次测试时间限制:2 秒
内存限制:256 兆字节
这是该问题的简单版本。唯一的不同点在于你可以执行的最大操作次数。只有两个版本都解决时,你才能进行破解。
你有一个大小为 n 的数组 a。
酷炫交换行走定义如下过程:
在一个 n×n 的网格中,我们用 (i,j) 表示第 i 行第 j 列的格子。你需要从 (1,1) 走到 (n,n),每次只能向右或向下走一步。
形式化地说,如果你当前在 (x,y),你可以走到 (x+1,y) 或 (x,y+1),但不能走出网格边界。
当你踏入格子 (i,j) 时,如果 i=j,你必须交换 ai 和 aj。
你可以执行最多 2n+4 次酷炫交换行走。目标是将数组 a1,a2,…,an 按非递减顺序排序。可以证明,总是可以做到的。
输入
第一行包含一个整数 t(1≤t≤104)——测试用例的数量。
每个测试用例的第一行包含一个整数 n(2≤n≤500)——数组的大小。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)——数组的元素。
保证所有测试用例的 n2 之和不超过 2.5×105。
输出
对于每个测试用例,输出应包含若干行:
- 第一行包含一个整数 k(0≤k≤2n+4),表示你执行的酷炫交换行走的次数。
- 接下来的 k 行,每行包含一个长度为 2n−2 的字符串 s,由 R 和 D 组成,表示一条路径(字母区分大小写)。对于所有 1≤i≤2n−2,如果 si 是 R,表示在第 i 步向右走;如果是 D,表示在第 i 步向下走。
示例
输入
3
2
1 2
3
2 1 3
4
3 2 3 4
输出
0
2
RRDD
DRDR
3
RRDRDD
DRDDRR
DDRRRD
说明
在第一个测试用例中,数组 a 已经是非递减的,因此不需要执行任何行走。
在第二个测试用例中,初始 a=[2,1,3]。
第一次行走:
- 第 1 步,向右走到 (1,2)。此时 a=[1,2,3]。注意虽然数组已非递减,但必须走到 (n,n) 才能结束。
- 第 2 步,向右走到 (1,3)。此时 a=[3,2,1]。
- 第 3 步,向下走到 (2,3)。此时 a=[3,1,2]。
- 第 4 步,向下走到 (3,3)。此时 a=[3,1,2]。
第二次行走:
- 第 1 步,向下走到 (2,1)。此时 a=[1,3,2]。
- 第 2 步,向右走到 (2,2)。此时 a=[1,3,2]。
- 第 3 步,向下走到 (3,2)。此时 a=[1,2,3]。
- 第 4 步,向下走到 (3,3)。此时 a=[1,2,3]。
经过以上两次酷炫交换行走,得到 a=[1,2,3],已排序。