CF1458C Latin Square

题目描述

给定一个大小为 $n$ 的方阵。该矩阵的每一行和每一列都是 $1, 2, \ldots, n$ 的一个排列。对于每个 $1 \leq i, j \leq n$,$a_{i, j}$ 表示第 $i$ 行第 $j$ 列的元素。行从上到下编号为 $1, \ldots, n$,列从左到右编号为 $1, \ldots, n$。 有六种操作: - R:将所有列循环右移一位,形式化地说,将每个 $a_{i, j}$ 赋值为 $a_{i, ((j - 2)\bmod n) + 1}$; - L:将所有列循环左移一位,形式化地说,将每个 $a_{i, j}$ 赋值为 $a_{i, (j\bmod n) + 1}$; - D:将所有行循环下移一位,形式化地说,将每个 $a_{i, j}$ 赋值为 $a_{((i - 2)\bmod n) + 1, j}$; - U:将所有行循环上移一位,形式化地说,将每个 $a_{i, j}$ 赋值为 $a_{(i\bmod n) + 1, j}$; - I:将每一行从左到右读出的排列替换为其逆排列。 - C:将每一列从上到下读出的排列替换为其逆排列。 排列 $p_1, p_2, \ldots, p_n$ 的逆排列为 $q_1, q_2, \ldots, q_n$,满足对于每个 $1 \leq i \leq n$,有 $p_{q_i} = i$。可以证明,经过任意一系列操作后,矩阵的每一行和每一列仍然是 $1, 2, \ldots, n$ 的一个排列。 给定初始矩阵,处理 $m$ 次操作,输出最终的矩阵。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 1000$),表示测试用例的数量。接下来是 $t$ 组测试用例。 每组测试用例的第一行包含两个整数 $n$ 和 $m$($1 \leq n \leq 1000, 1 \leq m \leq 10^5$),分别表示矩阵的大小和操作的数量。 接下来的 $n$ 行,每行包含 $n$ 个用空格分隔的整数,描述矩阵 $a$($1 \leq a_{i, j} \leq n$)。 每组测试用例的最后一行包含一个长度为 $m$ 的字符串,按顺序描述操作。 所有测试用例中 $n$ 的总和不超过 $1000$,所有测试用例中 $m$ 的总和不超过 $10^5$。

输出格式

对于每组测试用例,输出 $n$ 行,每行 $n$ 个整数,表示经过 $m$ 次操作后的最终矩阵。

说明/提示

样例测试用例答案之间的换行仅为清晰起见,实际输出时不需要额外换行。 由 ChatGPT 4.1 翻译