IOI2021 国家集训队作业 D Rubik's Rectangle
Description
给定一个 \(n \times m\) 的矩阵,填入了 \(1 \sim n \times m\) 中的数各一次,你可以翻转某一行或某一列,使得第 \(i\) 行第 \(j\) 列的数为 \((i-1)m+j\),操作次数 \(\le 10nm\)。
Solution
注意到在操作前后,\(\forall (i,j)\),\((i,j),(i,m-j+1),(n-i+1,j),(n-i+1,m-j+1)\) 上的数组成的排列的可重集不变。我们先判掉初始和目标状态可重集不同的情况。
若 \(n\) 是奇数则要特判第 \(\frac {n+1} {2}\) 行,若 \(m\) 是奇数则要特判第 \(\frac {m+1} {2}\) 列,二者都是平凡的。这样一来,每个排列长度均为 \(4\)。
我们尝试对每个排列分开考虑。假设 \((i,j),(i,m-j+1),(n-i+1,j),(n-i+1,m-j+1)\) 上的数分别为 \(a,b,c,d\),则只有以下四种操作有影响:
-
操作一:翻转第 \(i\) 行。
-
操作二:翻转第 \(n-i+1\) 行。
-
操作三:翻转第 \(j\) 列。
-
操作四:翻转第 \(m-j+1\) 列。
我们的目标是,在保证每种操作都进行偶数次的前提下,将 \(a,b,c,d\) 归位。
打表发现,上述目标可被达成,当且仅当目标状态与 \(\{a,b,c,d\}\) 两排列的奇偶性相同。满足该要求时,构造是容易的,这里不再赘述。
下面,我们只需考虑 \(\{a,b,c,d\}\) 奇偶性不合法的情况。注意到,假设我们对第 \(x\) 行操作,那么所有 \((x,y)\) 对应的排列的逆序对数 \(\bmod 2\) 均会被反转;列,同理。令 \(t_{i,j}\) 表示第 \(i\) 行第 \(j\) 列对应排列的奇偶性,则问题转化为:将若干行,若干列反转,使得 \(t\) 全 \(0\)。
这是经典问题,随便线性扫一遍就好了。时间复杂度 \(O(n^2)\)。
bonus: 尝试解决计数问题。实际并不复杂,还挺有意思的。

浙公网安备 33010602011771号