请您帮我解决这个问题:四:给定正整数n是6的倍数。将一个n*n方格表的每个格子染成三种颜色之一,满足...

作成日: 2026年8月18日

使用モデル GPT-5.6 Thinking by Chat01

質問

请您帮我解决这个问题:四:给定正整数n是6的倍数。将一个nn方格表的每个格子染成三种颜色之一,满足任何两个有公共边的格子的颜色都不一样,并且三种颜色的格子数量都相同。将13或者3*1形状的矩形称为“条形”,如果一个条形中有且只有三种颜色,则称它是“好的”,问至少有多少个好的条形。

Python

python
from itertools import product def row_states(n): rows=[] for r in product(range(3), repeat=n): if all(r[j]!=r[j+1] for j in range(n-1)): rows.append(r) return rows rows=row_states(6) len(rows) 96

Python

python
def min_good_dp(n): rows=[] for r in product(range(3), repeat=n): if all(r[j]!=r[j+1] for j in range(n-1)): rows.append(r) target=n*n//3 compat={a:[b for b in rows if all(x!=y for x,y in zip(a,b))] for a in rows} def hg(r): return sum(r[j]!=r[j+2] for j in range(n-2)) dp={} if n==1: return None for a in rows: for b in compat[a]: cnt=tuple(a.count(k)+b.count(k) for k in range(3)) if all(x<=target for x in cnt): dp[(a,b,cnt)]=hg(a)+hg(b) for i in range(2,n): nd={} for (a,b,cnt),cost in dp

Python

python
# enumerate all proper 2x2 blocks blocks=[] for vals in product(range(3), repeat=4): mat=[vals[:2],vals[2:]] if proper_grid(mat): eps=tuple(1 if vals.count(c)==2 else 0 for c in range(3)) blocks.append((vals,eps)) viol=[] for v,e in blocks: for w,f in blocks: hd=sum(a!=b for a,b in zip(v,w)) ed=sum(a!=b for a,b in zip(e,f)) if hd<ed: viol.append((v,e,w,f,hd,ed)) break if viol: break len(blocks), viol[:1] (18, [])

思考

Calculated Hamming and epsilon distances between block types

Worked for 7m 50s

回答

答案是

3n2.\boxed{\frac{3n}{2}}.

下面给出一个比较完整的证明。核心是把原来的 n×nn\times n 方格按 2×22\times2 分块。

设三种颜色为 0,1,20,1,2,并令

k=n2.k=\frac n2.

由于 6n6\mid n,所以 3k3\mid k

1. “好条形”的一个简单判定

一个连续的 1×31\times3 条形颜色依次为 a,b,ca,b,c。因为相邻格异色,所以

ab,bc.a\ne b,\qquad b\ne c.

于是它是好的,当且仅当 aca\ne c

换句话说:

长度为 3 的条形是好的,当且仅当它两端的颜色不同。

竖直条形同理。


2. 把棋盘分成 k×kk\times k2×22\times2 小块

把第 1,21,2 行配成一组,第 3,43,4 行配成一组,等等;列也如此。于是得到一个

k×kk\times k

的“小块棋盘”。

对一个 2×22\times2 小块 QQ,定义

εc(Q)={1,若颜色 c 在 Q 中恰出现两次,0,否则.\varepsilon_c(Q)= \begin{cases} 1,&\text{若颜色 }c\text{ 在 }Q\text{ 中恰出现两次},\\ 0,&\text{否则}. \end{cases}

由于同色格不能共边,一个颜色在 2×22\times2 小块里最多出现两次。因此一个合法小块的颜色数只能是

(2,2,0)(2,1,1).(2,2,0)\quad\text{或}\quad(2,1,1).

所以

(ε0,ε1,ε2)(\varepsilon_0,\varepsilon_1,\varepsilon_2)

一定是下面六种之一:

110, 101, 011, 100, 010, 001.110,\ 101,\ 011,\ 100,\ 010,\ 001.

3. 相邻两个 2×22\times2 块能贡献多少好条形?

设两个 2×22\times2 小块 Q,RQ,R 水平相邻。

跨越它们公共边的 1×31\times3 条形一共有四个。根据第 1 步,一个这样的条形好,当且仅当其左右两端——也就是 Q,RQ,R相同相对位置的两个格子——颜色不同。

因此,跨越这条小块边界的好条形数,恰好等于 Q,RQ,R 两个 2×22\times2 图案对应位置颜色不同的格子数。

而对两个合法的 2×22\times2 图案,有

d(Q,R)c=02εc(Q)εc(R).(1)d(Q,R)\ge \sum_{c=0}^2 |\varepsilon_c(Q)-\varepsilon_c(R)|. \tag{1}

这里右边就是两个 0/10/1 向量的 Hamming 距离。

简单说明一下为什么成立。右边只可能是 0,1,2,30,1,2,3

  • 11 时显然至少改一个格子;
  • 22 时,若两个块都是 (2,2,0)(2,2,0) 型,改变“缺少的颜色”至少要改两个格子;若都是 (2,1,1)(2,1,1) 型而“出现两次的颜色”不同,也不可能只改一个格子,否则会造成相邻同色;
  • 33 时,一个块中某色完全没有,而另一个块中该色出现两次。若只改两个格子,这两个新颜色必须位于一条对角线上;但原来的 (2,2,0)(2,2,0) 图案每条对角线本来就是同色,于是另两色的数量不可能同时从 2,22,2 变成 1,11,1。故至少改三个格子。

竖直相邻的小块完全同理。

因此,如果 GG 是所有好条形的总数,那么

GQRc=02εc(Q)εc(R).G\ge \sum_{Q\sim R} \sum_{c=0}^2 |\varepsilon_c(Q)-\varepsilon_c(R)|.

交换求和次序:

Gc=02b(Sc),(2)G\ge \sum_{c=0}^2 b(S_c), \tag{2}

其中

Sc={Q:εc(Q)=1},S_c=\{Q:\varepsilon_c(Q)=1\},

b(Sc)b(S_c) 表示在 k×kk\times k 小块棋盘中,一端属于 ScS_c、另一端不属于 ScS_c 的边数。


4. 每个 ScS_c 都占了至少三分之一、至多三分之二

固定一种颜色 cc

设在全部 k2k^22×22\times2 小块中:

  • zz 个块中颜色 cc 出现 00 次;
  • oo 个块中出现 11 次;
  • tt 个块中出现 22 次。

于是

z+o+t=k2.z+o+t=k^2.

而这种颜色在整个棋盘里共有

n23=4k23\frac{n^2}{3}=\frac{4k^2}{3}

个格子,所以

o+2t=4k23.o+2t=\frac{4k^2}{3}.

两式相减得到

tz=k23.t-z=\frac{k^2}{3}.

因此

t=k23+zk23.t=\frac{k^2}{3}+z\ge\frac{k^2}{3}.

另一方面,

o=2k232z0,o=\frac{2k^2}{3}-2z\ge0,

所以 zk2/3z\le k^2/3,从而

t2k23.t\le\frac{2k^2}{3}.

t=Sct=|S_c|。所以对三种颜色都成立:

k23Sc2k23.(3)\boxed{\frac{k^2}{3}\le |S_c|\le\frac{2k^2}{3}}. \tag{3}

5. 一个小的网格边界引理

引理:k×kk\times k 方格图中,若集合 SS 满足

k23S2k23,\frac{k^2}{3}\le |S|\le\frac{2k^2}{3},

那么

b(S)k.(4)b(S)\ge k. \tag{4}

证明很短。

假设反而 b(S)<kb(S)<k

称一行为“混合行”,若这一行中既有 SS 中的格,也有 SS 外的格。设混合行有 rr 行。每个混合行至少贡献一条水平边界,所以水平边界至少为 rr

类似地,若混合列有 ss 列,则竖直边界至少为 ss。故

r+sb(S)<k.(5)r+s\le b(S)<k. \tag{5}

因此必有非混合行和非混合列。

若既有整行属于 SS,又有整行不属于 SS,那么每一列从这两行之间走过去至少发生一次“进出 SS”的变化,于是竖直边界至少为 kk,矛盾。

所以所有非混合行状态相同;非混合列也相同。必要时用 SS 的补集代替 SS,可以假设所有非混合行、非混合列都不属于 SS

于是所有属于 SS 的格子只能位于那 rr 个混合行和 ss 个混合列的交叉处,因此

Srs(r+s)24<k24<k23,|S|\le rs \le \frac{(r+s)^2}{4} <\frac{k^2}{4} <\frac{k^2}{3},

与条件矛盾。引理得证。

由 (3)(4),

b(S0),b(S1),b(S2)k.b(S_0),b(S_1),b(S_2)\ge k.

代入 (2):

G3k=3n2.G\ge3k=\frac{3n}{2}.

所以任何合法染色至少有

3n2\boxed{\frac{3n}{2}}

个好条形。


6. 构造达到这个下界

n=6m.n=6m.

用颜色 0,1,20,1,2

4m=2n34m=\frac{2n}{3} 行按下面两种行交替:

010101010101\cdots 202020202020\cdots

即奇数行用第一种,偶数行用第二种。

最后 2m=n32m=\frac n3 行按下面两种交替:

121212121212\cdots 212121212121\cdots

因为 4m4m 为偶数,所以两部分交界处是

202020202020\cdots

下面接

121212,121212\cdots,

对应位置也全部异色。因此整个染色满足相邻格不同色。

三种颜色数量也容易检查都为

n23.\frac{n^2}{3}.

每一行都严格两色交替,所以没有水平的好条形

设两部分的交界在第 4m4m 行与第 4m+14m+1 行之间。只有跨越这个交界的竖直 3×13\times1 条形可能是好的:

  • 4m1,4m,4m+14m-1,4m,4m+1 三行组成的条形,在所有 nn 列都好;
  • 4m,4m+1,4m+24m,4m+1,4m+2 三行组成的条形,恰有 n/2n/2 列好。

所以恰有

n+n2=3n2n+\frac n2=\frac{3n}{2}

个好条形。

因此最小值确实为

3n2.\boxed{\displaystyle \frac{3n}{2}}.

このQ&Aを共有