1 条题解
-
0
题目重述
有一个 的网格,需要给每个格子染色,使得:
任意两个相同颜色的格子 和 满足
换句话说,两个格子如果颜色相同,它们在行方向或列方向上的距离必须至少为 (切比雪夫距离 )。
要求最少的颜色数。
1. 条件理解
表示:- 要么行号差
- 要么列号差
更直观地说:
如果两个格子的行号差 且列号差 ,它们必须颜色不同。换句话说:
一个 的正方形区域内的所有格子,必须颜色两两不同。为什么呢?
在一个 子矩阵中,任意两个不同格子的 且 ,所以 ,违反条件,因此它们不能同色。
2. 转化为经典问题
这相当于:
把 的网格划分为若干个 的小块(可能会在边界处不完整),
每个 块内必须颜色互不相同。那么最少颜色数是多少?
关键观察:
在一个 的完整块内,需要 种不同颜色。
但是不同块之间可以复用颜色吗?
可以,只要它们不违反距离条件。考虑两个不同的 块:
- 如果它们在行方向相距至少 ,或者列方向相距至少 ,那么对应的两个格子 可能仍然 吗?
其实要小心:如果块1在 ,块2在 ,那么取块1最下面一行和块2最上面一行,行差 = (),列差可能为 (),这样 ,所以这两格不能同色。
因此垂直相邻的块不能完全使用相同颜色映射。
但这里有一个更简洁的已知结论(常见于 Codeforces 类似题 1552B 或构造题):
该条件等价于:颜色数至少为 。
为什么?
3. 构造与下界
下界:
考虑前 行和前 列构成的子矩阵,大小为
,。
在这个 的子矩阵中,任意两格的行差 且列差 (因为 ,),所以它们必须颜色不同。
因此至少需要 种颜色。即:
上界(构造):
我们可以用这 种颜色填满整个网格,方法如下:
把颜色看作一个 的调色板,编号为 ,其中 ,。
对网格中任意格子 (,),令
$$\text{color}(x,y) = \left( (x-1) \bmod a + 1,\ (y-1) \bmod b + 1 \right) $$即行模 ,列模 。
这样:
- 如果两个格子行差 且列差 ,那么它们在行模 和列模 下分别相等吗?
不一定直接。但我们可以证明这种构造满足原条件:
假设两格同色,则 ,。
于是 是 的倍数, 是 的倍数。
若 且 ,因为 ,,唯一可能是 且 ,即同一格,矛盾。
所以确实满足条件。
因此构造可行,需要颜色数正好是 。
4. 最终公式
最少颜色数:
5. 验证样例
-
,,答案 ✓ -
,,答案 ✓ -
,,答案 ✓ -
,,答案 ✓ -
,,答案 ✓ -
,,答案 ✓
全部匹配。
- 1
信息
- ID
- 6608
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者