https://beta.atcoder.jp/contests/abc075/tasks/abc075_b
解法
https://beta.atcoder.jp/contests/abc075/submissions/1682144
これも一応実装するだけなのだが、近傍の座標をどうにかする常套テクを知っていると実装が楽になる。
変数dx,dyを用意し、それぞれdx=[-1,0,1], dy=[-1,0,1]とする。
すると、(x,y)近傍の座標(xx, yy)はxx = x + dx, yy = y + dyとでき、単純なループで近傍を指定できる。
後は、爆弾の個数を数えて更新するだけ。
int H, W; string B[101]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> H >> W; rep(y, 0, H) cin >> B[y]; rep(y, 0, H)rep(x, 0, W) if(B[y][x] == '.') { int c = 0; rep(dx, -1, 2) rep(dy, -1, 2) { if (dx == 0 and dy == 0) continue; int xx = x + dx; int yy = y + dy; if (0 <= xx and xx < W and 0 <= yy and yy < H) { if (B[yy][xx] == '#') c++; } } B[y][x] = char('0' + c); } rep(y, 0, H)cout << B[y] << endl; }