問題概要
問題ページ
-
B - Blocks on Grid
問題ページへ移動する
問題文
縦 \(H\) マス、横 \(W\) マスのマス目があります。上から \(i\) 行目、左から \(j\) 列目のマスには、ブロックが \(A_{i,j}\) 個あります。
どのマスにも同じ個数のブロックがある状態にするには、最小で何個のブロックを取り除けばよいでしょうか?
制約
- \(1 \leq H,W \leq 100\)
- \(0\leq A_{i,j} \leq 100\)
問題の考察
ブロックの数はを増やすことはできないが、減らすことはできることを読み取れれば簡単な問題。
ブロックの個数の最小値を求めて、全てのブロックを最小値にあわせれば良い。
for
文で全てのマスを全探索して最小値を求めて、再度for
文で現在のブロックの個数を最小値の個数を集計すれば良い。
たびすけ
for
文とmin
を使って集計ができれば簡単な問題です!ACコード
import sys
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
h, w = list(map(int, input().rstrip('\n').split()))
a = [list(map(int, input().rstrip('\n').split())) for _ in range(h)]
mn = 10 ** 20
for i in range(h):
for j in range(w):
mn = min(mn, a[i][j])
cnt = 0
for i in range(h):
for j in range(w):
cnt += a[i][j] - mn
print(cnt)
if __name__ == '__main__':
solve()