結果
問題 |
No.2095 High Rise
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:19:27 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,246 bytes |
コンパイル時間 | 277 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 175,872 KB |
最終ジャッジ日時 | 2025-03-20 20:20:25 |
合計ジャッジ時間 | 5,305 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 9 WA * 15 |
ソースコード
def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 M = int(input[idx]) idx += 1 if N == 1: print(0) return A = [] for _ in range(N): row = list(map(int, input[idx:idx+M])) idx += M A.append(row) # Compute sum_Aj for each column (covers all floors) sum_Aj = [] for j in range(M): total = sum(A[i][j] for i in range(N)) sum_Aj.append(total) ans_candidate1 = min(sum_Aj) # Precompute left and right for each column left = [] right = [] for j in range(M): # Compute prefix sums (left[i] is sum from floor 1 to i+1 (0-based)) prefix = [0] * (N+1) for i in range(N): prefix[i+1] = prefix[i] + A[i][j] left_j = prefix[1:] # left_j[0] is A[0], left_j[i] is sum from 0 to i left.append(left_j) # Compute suffix sums (right[i] is sum from floor i (0-based) to N-1 suffix = [0] * (N+1) for i in range(N-1, -1, -1): suffix[i] = suffix[i+1] + A[i][j] right_j = [0] * N for i in range(N): right_j[i] = suffix[i] right.append(right_j) # Compute left_min and right_min for each floor (0-based?) left_min = [float('inf')] * (N) right_min = [float('inf')] * (N) for j in range(M): for i in range(N): if left[j][i] < left_min[i]: left_min[i] = left[j][i] if right[j][i] < right_min[i]: right_min[i] = right[j][i] ans_candidate2 = float('inf') for i in range(N): # i is 0-based, corresponds to floor 1-based i+1 # left_min[i] is sum from floor 1 to i+1 (if 0-based) # Need to check if i+1 covers at least some part, and i+1 < N current_left = left_min[i] current_right = right_min[i] if i < N-1 else 0 # if i == N-1, there's nothing to the right if i < N-1: total = current_left + current_right if total < ans_candidate2: ans_candidate2 = total answer = min(ans_candidate1, ans_candidate2) print(answer) if __name__ == "__main__": main()