🌸

# パナソニックプログラミングコンテスト(AtCoder Beginner Contest 186) B - Blocks on Grid

2021/01/21に公開

パナソニックプログラミングコンテスト(AtCoder Beginner Contest 186) B - Blocks on Grid

問題へのリンク

https://atcoder.jp/contests/abc186/tasks/abc186_b

問題概要

H マス、横 W マスのマス目がある。上から i 行目、左から j 列目のマスには、ブロックが A_{i, j} 個ある。どのマスにも同じ個数のブロックがある状態にするには、最小で何個のブロックを取り除けばよいか。

制約

1 \leq H, W \leq 100
0 \leq A_{i, j} \leq 100

ABC中の解答

問題では2次元上での話だが、特に何次元でもやることに変わりはなく要は最小の値を求めて各マスとその値との差の和を求めればよい。

import numpy as np
H, W = map(int, input().split())
A = []
for _ in range(H):
    tmp = list(map(int, input().split()))
    A.append(tmp)
A = np.array(A)
ans = (A - A.min()).sum()
print(ans)

https://atcoder.jp/contests/abc186/submissions/18865561

公式解法1

ほぼ同じのため省略

Discussion