0
0

paizaラーニング問題集「二次元累積和」を解いてみた

Posted at

▼感想:

累積和の計算方法のやりかたを踏まえて、本問を解くことができました。

▼コード:

########## 処理0(準備) インプット,リスト定義など ###########

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

A = [[0 for i in range(W)] for j in range(H)]

# ruisekiwa_yoko,ruisekiwa_tate: 横方向,縦方向の累積和格納用リスト
ruisekiwa_yoko = [[0 for i in range(W)] for j in range(H)]
ruisekiwa_tate = [[0 for i in range(W)] for j in range(H)]

########## 処理1 横方向の累積和の計算、格納 ##########

for j in range(H):

    A[j] = list(map(int,input().split()))

    ruisekiwa_yoko[j][0] = A[j][0]

    for i in range(W-1):
         ruisekiwa_yoko[j][i+1] = ruisekiwa_yoko[j][i] + A[j][i+1]

########## 処理2 縦方向の累積和の計算、格納 ##########

for i in range(W):

    ruisekiwa_tate[0][i] = A[0][i]

    for j in range(H-1):
         ruisekiwa_tate[j+1][i] = ruisekiwa_tate[j][i] + A[j+1][i]

########## 処理3 入力に応じた累積和の計算 ##########

for _ in range(N):

    # total: 計算した累積和の格納用変数
    total = 0    
    y,x = map(int,input().split())

    # 入力が横長
    if y < x:
        for j in range(y):
            total += ruisekiwa_yoko[j][x-1]

    # 入力が縦長、または横と縦が同じ長さ
    else:
        for i in range(x):
            total += ruisekiwa_tate[y-1][i]

    print(total)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0