回答
Submission #441658 - AtCoder Regular Contest 041 | AtCoder
解説通りの回答でした.
上から見ていって,0より大きければ,該当マスを引き算し,計算用のテーブルに書き込む感じ.
最初文字列で処理しようとしていましたが,めんどくさくなって結局数値で処理した.多分そのほうがわかりやすいと思う.
それと,計算用のテーブルと回答用のテーブルを分けるのも一つポイントではないだろうか.一つのテーブルで計算しようとすると結構めんどくさい問題だと思う... 少なくとも私は考えたくないですね.
n, m = map(int, input().split()) btab, restab = [], [] for _ in range(n): btab.append(list(map(int, list(input())))) restab.append([0] * m) for i in range(n): for j in range(m): if btab[i][j] > 0: b = btab[i][j] restab[i+1][j] += b btab[i][j] -= b btab[i+1][j-1] -= b btab[i+1][j+1] -= b btab[i+2][j] -= b for res in restab: print("".join(map(str, res)))