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\) 个点分别跑一遍,最后偏移量是一样的。
真是太神奇啦!
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/18856675

浙公网安备 33010602011771号