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 翻译