備忘録

徒然なるままに。

競プロ典型:Cross Sum

WBCの余韻でしばらく更新していなかったので、少し前に書くだけ書いていたものを公開。回答の熟考等はまた明日以降改めて。

                  • -

行き詰ったので少し先にやろうと思っていた競プロ典型から題名の問題を。

自分のコード

H, W = map(int, input().split())

arr = [list(map(int, input().split())) for l in range(H)]

arr_sum_l = [sum(x) for x in zip(*arr)]
arr_sum_r = [sum(x) for x in arr]

for i in range(H):
  arr_ans = []
  for j in range(W):
    val = arr_sum_l[j] + arr_sum_r[i] - arr[i][j]
    arr_ans.append(val)
  print(*arr_ans)

for文の回し方にやや苦戦した。普通に読み込んで普通に処理しようとすると制限時間を越えてしまったので内包表記を使用してなんとか時間内に落とし込んだ。

参考コード

import sys
input = sys.stdin.readline
h, w = [int(i) for i in input().split()]
A = [[int(i) for i in input().split()] for _ in range(h)]
 
row_sums = [sum(a) for a in A]
column_sums = [0] * w
for a in A:
    for i in range(w):
        column_sums[i] += a[i]
 
res = [[row_sums[y] + column_sums[x] - A[y][x] for x in range(w)] for y in range(h)]
 
for r in res:
    print(*r)