day10t2 翻转

你有一个初始填满 \(1\sim4nm\) 的矩阵,长为 \(n\),宽为 \(m\),第一行是 \(1\sim2m\),第二行是 \(2m+1\sim 4m\),以此类推。

另外这个矩阵被以 \(2\times2\) 为单位黑白染色。

以下展示的是一个 \(n=2,m=3\) 的情况。

\[\begin{bmatrix} \mathbf 1 &\mathbf 2 & 3 &4 &\mathbf5 &\mathbf 6\\ \mathbf7 &\mathbf8 & 9&10 & \mathbf{11} &\mathbf{12} \\ 13 & 14 & \mathbf{15} & \mathbf{16} &17 & 18\\ 19& 20 & \mathbf{21}& \mathbf{22} & 23 &24 \end{bmatrix} \]

你需要维护 \(5\) 种操作:

  • 对于每个 \(0\le j < m\),交换第 \(2j\) 和第 \(2j+1\) 列。
  • 对于每个 \(1\le j < m\),交换第 \(2j\) 和第 \(2j-1\) 列。
  • 对于每个 \(0\le i < n\),交换第 \(2i\) 和第 \(2i+1\) 行。
  • 对于每个 \(1\le i < n\),交换第 \(2i\) 和第 \(2i-1\) 行。
  • 对于每一个 \(2\times2\) 的子矩阵,将黑色的部分顺时针旋转,白色的部分逆时针旋转。

想不到啊根本想不到。

我们发现不考虑边界上的点时,对于每种操作,只要颜色,\(x\) 奇偶性,\(y\) 奇偶性相同的点,他们的坐标偏移量都是相同的。

要解决边界上的点也很简单,我们考虑将这个矩阵对于右边界和下边界分别翻转,例如对于样例的图:

\[\begin{align} \begin{bmatrix} \mathbf 1 &\mathbf 2 & 3 &4 &\mathbf5 &\mathbf 6\\ \mathbf7 &\mathbf8 & 9&10 & \mathbf{11} &\mathbf{12} \\ 13 & 14 & \mathbf{15} & \mathbf{16} &17 & 18\\ 19& 20 & \mathbf{21}& \mathbf{22} & 23 &24 \end{bmatrix} \begin{bmatrix} \mathbf 6 &\mathbf 5 & 4 &3 &\mathbf2 &\mathbf 1\\ \mathbf{12} &\mathbf{11} & 10&9 & \mathbf8 &\mathbf7 \\ 18 & 17 & \mathbf{16} & \mathbf{15} &14 & 13\\ 24& 23 & \mathbf{22}& \mathbf{21} & 20 &19 \end{bmatrix} \\ \begin{bmatrix} 19 & 20 & \mathbf{21} & \mathbf{22} & 23 &24 \\ 13 & 14 & \mathbf{15} & \mathbf{16} &17 & 18\\ \mathbf7 &\mathbf8 & 9&10 & \mathbf{11} &\mathbf{12} \\ \mathbf 1 &\mathbf 2 & 3 &4 &\mathbf5 &\mathbf 6 \end{bmatrix} \begin{bmatrix} 24 & 23 & \mathbf{22} & \mathbf{21} & 20 &19 \\ 18 & 17 & \mathbf{16} & \mathbf{15} &14 & 13\\ \mathbf{12} &\mathbf{11} & 10&9 & \mathbf8 &\mathbf7 \\ \mathbf 6 &\mathbf 5 & 4 &3 &\mathbf2 &\mathbf 1 \end{bmatrix} \end{align} \]

upd: 染色应该依然是黑白间隔染色,而不是像这里一样,但是这里懒得改了 😄

此时我们发现,\(2,4\) 操作可以同样应用到边界!

那么我们只要对颜色,\(x\) 奇偶性,\(y\) 奇偶性不同的 \(8\) 个点分别跑一遍,最后偏移量是一样的。

真是太神奇啦!

posted @ 2025-05-01 16:58  CuteNess  阅读(12)  评论(0)    收藏  举报