💻
AtCoder - Cross Sum -
AtCoder Cross Sum
問題リンク
解法
この問題では、各マスに対して、同じ行または同じ列にあるマスの値の合計を求める必要があります。以下のアプローチで解きます。
アプローチ
-
行ごとの合計と列ごとの合計を計算
- 各行の合計を
row_sums
に格納します。 - 各列の合計を
col_sums
に格納します。
- 各行の合計を
-
各マスの答えを計算
- マス(i, j)の答えは「行iの合計」+「列jの合計」から「マス(i, j)」の値を引いたものです。
ステップ
- 行ごとの合計を計算する。
- 列ごとの合計を計算する。
- マス(i, j)における結果を、
row_sums[i] + col_sums[j] - A[i][j]
で求める。 - 結果を出力します。
Python実装
# 入力の受け取り
H, W = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(H)]
# 行ごとの合計
row_sums = [sum(row) for row in A]
# 列ごとの合計
col_sums = [sum(A[i][j] for i in range(H)) for j in range(W)]
# 答えを計算して出力
for i in range(H):
result_row = []
for j in range(W):
# (i, j)の値を含む行と列の合計
result = row_sums[i] + col_sums[j] - A[i][j]
result_row.append(result)
# 出力(スペース区切りで1行ずつ)
print(' '.join(map(str, result_row)))
説明
-
row_sums
は各行の合計を保持するリストです。 -
col_sums
は各列の合計を保持するリストです。 -
result = row_sums[i] + col_sums[j] - A[i][j]
で、行と列の合計から重複してカウントされたマス(i, j)の値を引いています。 - 最後に各行の結果をスペース区切りで出力しています。
Discussion