1 条题解

  • 0
    @ 2026-4-20 8:02:03

    题目重述

    有一个 n×mn \times m 的网格,需要给每个格子染色,使得:

    任意两个相同颜色的格子 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2) 满足
    max(x1x2,y1y2)k\max(|x_1-x_2|,|y_1-y_2|) \ge k

    换句话说,两个格子如果颜色相同,它们在行方向列方向上的距离必须至少为 kk(切比雪夫距离 k\ge k)。

    要求最少的颜色数。


    1. 条件理解

    max(x1x2,y1y2)k\max(|x_1-x_2|,|y_1-y_2|) \ge k
    表示:

    • 要么行号差 k\ge k
    • 要么列号差 k\ge k

    更直观地说:
    如果两个格子的行号差 <k< k 且列号差 <k< k,它们必须颜色不同。

    换句话说:
    一个 k×kk \times k 的正方形区域内的所有格子,必须颜色两两不同。

    为什么呢?
    在一个 k×kk \times k 子矩阵中,任意两个不同格子的 x1x2k1|x_1-x_2| \le k-1y1y2k1|y_1-y_2| \le k-1,所以 max<k\max < k,违反条件,因此它们不能同色。


    2. 转化为经典问题

    这相当于:
    n×mn \times m 的网格划分为若干个 k×kk \times k 的小块(可能会在边界处不完整),
    每个 k×kk \times k 块内必须颜色互不相同

    那么最少颜色数是多少?


    关键观察:

    在一个 k×kk \times k 的完整块内,需要 k×kk \times k 种不同颜色。
    但是不同块之间可以复用颜色吗?
    可以,只要它们不违反距离条件。

    考虑两个不同的 k×kk \times k 块:

    • 如果它们在行方向相距至少 kk,或者列方向相距至少 kk,那么对应的两个格子 max(x1x2,y1y2)\max(|x_1-x_2|,|y_1-y_2|) 可能仍然 <k< k 吗?
      其实要小心:如果块1在 (1..k,1..k)(1..k,1..k),块2在 (k+1..2k,1..k)(k+1..2k,1..k),那么取块1最下面一行和块2最上面一行,行差 = 11<k<k),列差可能为 00<k<k),这样 max<k\max < k,所以这两格不能同色。
      因此垂直相邻的块不能完全使用相同颜色映射

    但这里有一个更简洁的已知结论(常见于 Codeforces 类似题 1552B 或构造题):

    该条件等价于:颜色数至少为 min(n,k)×min(m,k)\min(n,k) \times \min(m,k)

    为什么?


    3. 构造与下界

    下界:

    考虑前 min(n,k)\min(n,k) 行和前 min(m,k)\min(m,k) 列构成的子矩阵,大小为
    a=min(n,k)a = \min(n,k)b=min(m,k)b = \min(m,k)
    在这个 a×ba \times b 的子矩阵中,任意两格的行差 <k< k 且列差 <k< k(因为 aka \le kbkb \le k),所以它们必须颜色不同。
    因此至少需要 a×ba \times b 种颜色。

    即:

    下界=min(n,k)×min(m,k)\text{下界} = \min(n,k) \times \min(m,k)

    上界(构造):

    我们可以用这 a×ba \times b 种颜色填满整个网格,方法如下:

    把颜色看作一个 a×ba \times b 的调色板,编号为 (i,j)(i,j),其中 1ia1 \le i \le a1jb1 \le j \le b

    对网格中任意格子 (x,y)(x,y)1xn1 \le x \le n1ym1 \le y \le m),令

    $$\text{color}(x,y) = \left( (x-1) \bmod a + 1,\ (y-1) \bmod b + 1 \right) $$

    即行模 aa,列模 bb

    这样:

    • 如果两个格子行差 <k< k 且列差 <k< k,那么它们在行模 aa 和列模 bb 下分别相等吗?
      不一定直接。但我们可以证明这种构造满足原条件:
      假设两格同色,则 x1x2(moda)x_1 \equiv x_2 \pmod ay1y2(modb)y_1 \equiv y_2 \pmod b
      于是 x1x2|x_1-x_2|aa 的倍数,y1y2|y_1-y_2|bb 的倍数。
      x1x2<k|x_1-x_2| < ky1y2<k|y_1-y_2| < k,因为 aka \le kbkb \le k,唯一可能是 x1x2=0|x_1-x_2|=0y1y2=0|y_1-y_2|=0,即同一格,矛盾。
      所以确实满足条件。

    因此构造可行,需要颜色数正好是 a×ba \times b


    4. 最终公式

    最少颜色数:

    min(n,k)×min(m,k)\boxed{\min(n,k) \times \min(m,k)}

    5. 验证样例

    1. n=3,m=3,k=2n=3,m=3,k=2
      min(3,2)=2\min(3,2)=2min(3,2)=2\min(3,2)=2,答案 2×2=42\times2=4

    2. n=5,m=1,k=10000n=5,m=1,k=10000
      min(5,10000)=5\min(5,10000)=5min(1,10000)=1\min(1,10000)=1,答案 5×1=55\times1=5

    3. n=7,m=3,k=4n=7,m=3,k=4
      min(7,4)=4\min(7,4)=4min(3,4)=3\min(3,4)=3,答案 4×3=124\times3=12

    4. n=3,m=2,k=7n=3,m=2,k=7
      min(3,7)=3\min(3,7)=3min(2,7)=2\min(2,7)=2,答案 3×2=63\times2=6

    5. n=8,m=9,k=6n=8,m=9,k=6
      min(8,6)=6\min(8,6)=6min(9,6)=6\min(9,6)=6,答案 6×6=366\times6=36

    6. n=2,m=5,k=4n=2,m=5,k=4
      min(2,4)=2\min(2,4)=2min(5,4)=4\min(5,4)=4,答案 2×4=82\times4=8

    全部匹配。

    • 1

    信息

    ID
    6608
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    1
    已通过
    1
    上传者