#P15803. [中国国家队2025年林芝集训]构造题

[中国国家队2025年林芝集训]构造题

题目描述

给定一个标号从 00 开始的 N×NN\times N 方阵,其中包含从 00N21N^2-1 的所有整数,且每个整数恰好出现一次。

目标是把方阵变成有序状态,即对于每个 0i,j<N0\le i,j<N,第 ii 行第 jj 列的数字都等于

i×N+j.i\times N+j.

你可以使用下面两种操作。

下移操作

操作格式为:

D a_0 a_1 ... a_{N-1}

其中 a0,a1,,aN1a_0,a_1,\ldots,a_{N-1} 是当前方阵最上面一行数字的一种重新排列。

执行该操作后,当前方阵最上面一行被移除,并把由

a0,a1,,aN1a_0,a_1,\ldots,a_{N-1}

从左到右组成的新行加入到方阵底部。

右移操作

操作格式为:

R b_0 b_1 ... b_{N-1}

其中 b0,b1,,bN1b_0,b_1,\ldots,b_{N-1} 是当前方阵最左侧一列数字的一种重新排列。

执行该操作后,当前方阵最左侧一列被移除,并把由

b0,b1,,bN1b_0,b_1,\ldots,b_{N-1}

从上到下组成的新列加入到方阵右侧。

重新排列是指只改变这些数字的顺序,不添加或删除任何数字;也可以保持原顺序不变。

你的目标是用少于 3N3N 次操作解决这个问题。不过,如果使用更多操作,或者没有完全解决问题,也可能获得部分分数,具体见“计分方式”。

操作示例

如果当前方阵为:

行/列 0 1 2
0     2 4 6
1     8 1 5
2     7 3 0

执行操作:

D 6 2 4

会得到:

行/列 0 1 2
0     8 1 5
1     7 3 0
2     6 2 4

而执行操作:

R 2 8 7

会得到:

行/列 0 1 2
0     4 6 2
1     1 5 8
2     3 0 7

对于 N=3N=3,目标方阵为:

行/列 0 1 2
0     0 1 2
1     3 4 5
2     6 7 8

输入格式

第一行包含一个整数 NN

接下来 NN 行,每行包含 NN 个整数,表示初始方阵。

输出格式

第一行输出一个整数 MM,表示操作次数。

接下来 MM 行,每行输出一次操作,格式为以下两种之一:

D a_0 a_1 ... a_{N-1}

R b_0 b_1 ... b_{N-1}

其中 D 表示下移操作,R 表示右移操作,后面的 NN 个整数必须分别是当前最上面一行或当前最左侧一列的某种重新排列。

样例 1

输入

3
1 4 2
3 7 5
6 8 0

输出

4
R 3 6 1
D 2 3 4
D 5 6 7
R 2 5 8

解释

样例输出在少于 99 次操作中达到了目标状态,获得 100%100\% 的分数。

样例 2

输入

2
2 1
0 3

输出

0

解释

该输出没有解决问题,因为只有 1133 两个数字处于正确位置。此时正确位置数量为 22,总格子数为 44,因此得分为

50×24=25%.50\times\frac{2}{4}=25\%.

数据范围

  • 2N92\le N\le 9

本题有 88 个子任务,分别对应不同的 NN

  • N=2,3,4,5N=2,3,4,5 的子任务各 1212 分;
  • N=6,7,8,9N=6,7,8,9 的子任务各 1313 分。

计分方式

MM 表示你输出的操作次数。令

A=3N,B=2N2.A=3N,\qquad B=2N^2.

如果输出不合法,或者 M>BM>B,则得 00 分。

否则,设最终方阵中处于正确目标位置的数字数量为 CC

如果

C<N2,C<N^2,

则没有完全解决问题,只能获得

50×CN2%50\times\frac{C}{N^2}\%

的分数。

否则,即 C=N2C=N^2

  • 如果 M<AM<A,获得该测试点 100%100\% 的分数;
  • 如果 AMBA\le M\le B,获得
40×(BMBA)2+5040\times\left(\frac{B-M}{B-A}\right)^2+50

百分比的分数。

每个子任务的分数是其中所有测试点得分的最小值。