http://code-festival-2017-quala.contest.atcoder.jp/tasks/code_festival_2017_quala_d
45度回転をするとマンハッタン距離|x1-x2|+|y1-y2|がチェビシェフ距離max(|x1-x2|,|y1-y2|)に言い換えられて見通しが良くなります。
45度回転したGrid上でD*Dの正方形ごとに同じ色を塗っていけばよいです。市松模様みたいな感じになります。
こういう一つ例を構築する問題をロシアゲーというらしいです。
あと忘れがちですが、(a % b + b) % bとすればaが負の時でもaをbで割ったあまりが求められます。
int N, M, D; char C[2][2] = { {'R', 'Y'}, {'G', 'B'} }; void solve() { cin >> N >> M >> D; rep(i, 0, N) { string res; rep(j, 0, M) { int d = 2 * D; int x = ((i - j) % d + d) % d; int y = (i + j) % d; res += C[x < D][y < D]; } cout << res << "\n"; } }
ロシアゲー難しい…