名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

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