水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

ARC041 B - アメーバ

回答

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)))