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 的做法。

就是先把能填的都填了,然后随意填一个再填一个。其本质上应该也能用方向+行+列的角度严谨证明。

posted @ 2026-07-18 00:35  wangzhongyuan  阅读(6)  评论(0)    收藏  举报