qoj5070
做法1
分析一下不合法的两个结构,发现这两个 \(2 \times 2\) 的矩形中不存在相邻相等的对。相邻的对有竖着相邻和横着相邻,先只考虑横着相邻。即令 \(b_{i,j}=[a_{i,j}=a_{i,j+1}]\)。
考虑未确定的一段 \(b_{i,[l,r]}\),且通过两侧容易已知 \(\sum b_{i,[l,r]}\) 的奇偶性 \(p\)。则有一个贪心策略是:当 \(p=0\) 时则 \(b_{i,[l,r]}=0\);否则当 \(p=1\) 时只存在一个 \(b_{i,j}=1\)。正确性显然。则这里 “未确定” 可以扩展到每行的连续段。
于是考虑当 \(b_{i,j}=b_{i+1,j}=1\) 时,因为每个连续段最多有 \(1\) 个 \(1\),所以 \(a_{i,j}\) 与 \(a_{i+1,j}\) 分别是当且连续段的开头,所以已知 \(A\) 连续段与 \(B\) 连续段存在相邻 \(1\) 时是否产生矛盾。于是问题转换为只需将 \(b_{i,j}\) 填入 \(0/1\),然后满足一些条件。
首先可以将确定的全部填入。而未满足条件的连续段显然至少有两个位置 \(b_{i,j}=-1\),所以将条件缩小为最前面的两个 \(b_{i,x}+b_{i,y}=1\) 其余全填 \(0\)。显然有 \(|y-x|\le 2\)。
然后这里有一个结论:随便找到一组 \((i,x,y)\) 将 \(b_{i,x} \gets 1\) 然后将能确定的填入。不断重复这个过程,则一定有解。证明如下:
-
由于只有 \(x,y\) 所以考虑 2-SAT,且只需证明从 \(b_{i,x}\) 出发,不会扩展到 \(b_{i,y}\) 即可。
-
首先对于 \(|y-x|=1\),发现 \(i-1\) 和 \(i+1\) 两行分别只会有一组会与其产生矛盾;而对于 \(|y-x|=2\),则 \(i-1\) 和 \(i+1\) 两行上不会同时存在与 \((i,x,y)\) 矛盾的组。
-
所以考虑扩展过程中 s=行+列+方向 的奇偶性。若扩展后 \(|y-x|=1\) 则方向不会变,且 行、列奇偶性均变化,所以 \(s\) 不变。若扩展后 \(|y-x|=2\) 则接下来扩展的方向会变化,而行变化,列奇偶性不会变,所以 \(s\) 仍然不变。
-
而对于开头的 \((i,x,y)\),若导致无解则 \(s\) 必须变化,所以不会产生矛盾。
于是直接做就 ok 了。
做法2
这里是 jiangly 的做法。
就是先把能填的都填了,然后随意填一个再填一个。其本质上应该也能用方向+行+列的角度严谨证明。
浙公网安备 33010602011771号