Atcoder传送门
题目大意
给你四种颜色: R R 代表红色, 代表蓝色, G G 代表绿色, 代表黄色。
现在你有一个 H×W H × W 的方格, 你不能使曼哈顿距离为 d d 的方格颜色相同, 输出任意一种方案。
输入输出格式
输入格式
一行三个正整数。
输出格式
一共 H H 行,每行个字符, 分别为 R,B,G,Y R , B , G , Y 中的一个。
输入输出样例
输入样例#1
2 2 1
输出样例#1
RY
GR
输入样例#2
2 3 2
输出样例#2
RYB
RGB
数据范围
- 2≤H,W≤500 2 ≤ H , W ≤ 500
- 1≤d≤H+W−2 1 ≤ d ≤ H + W − 2
解题分析
先考虑曼哈顿距离转化为切比雪夫距离。题目就变成了一个方格不能和一个边长为 d×2−1 d × 2 − 1 ,重心在这个方格上的大正方形边上的方格颜色相同。
先回想一下一维的时候怎么涂色。显然我们会将长度为 d d 的连续一段涂成相同颜色, 不断切换颜色即可。推广到二维的话我们可以将的正方形涂成相同颜色。画一画图发现正好可以满足…
代码如下:
#include <cstdio>
#define R register
using namespace std;
int main(void)
{
int n, m, blk, x, y; char c;
scanf("%d%d%d", &n, &m, &blk);
for (R int i = 1; i <= n; ++i)
{
for (R int j = 1; j <= m; ++j)
{
x = (i + j + m) / blk % 2, y = (i - j + m) / blk % 2;
//i-j可能为负数,加为正数
printf("%c", "YBGR"[2 * x + y]);
}
putchar(10);
}
}