▼感想:
生地に含まれるチョコの数の累積和から、
生地の穴に含まれるチョコの数の累積和を減算しました。
累積和の計算方法のやりかたを踏まえて、本問を解くことができました。
▼コード:
########## 処理0(準備) インプット,リスト定義など ###########
H,W,N = map(int,input().split())
# sumC: チョコの数の累積和格納用リスト
C = [[0 for j in range(W)] for i in range(H)]
sumC = C
########## 処理1 チョコの数の累積和格納 ##########
for i in range(H):
C[i] = list(map(int,input().split()))
sumC[i][0] = C[i][0]
for j in range(1,W):
sumC[i][j] = sumC[i][j-1] + C[i][j]
########## 処理2 生地に含まれるチョコの数算出 ##########
for _ in range(N):
y,x,B,S = map(int,input().split())
# 生地の中心座標
yc = y - 1
xc = x - 1
# 生地の穴の開始位置
y_hs = yc - S//2
x_hs = xc - S//2
# 生地の開始位置
y_s = yc - B//2
x_s = xc - B//2
# ctotal_tmp: 生地y_i行目に存在するチョコの数格納用変数
# ctotal: 生地に存在するチョコの数格納用変数
ctotal = 0
ctotal_tmp = 0
for i in range(y_s,y_s+B):
# y_i行目に生地の穴が存在しない
if y_hs > i or i > y_hs+S-1:
if x_s == 0:
ctotal_tmp = sumC[i][x_s+B-1]
else:
ctotal_tmp = (sumC[i][x_s+B-1] - sumC[i][x_s-1])
# y_i行目に生地の穴が存在する
else:
#anasum: 生地の穴の部分に存在するチョコの数格納用変数
anasum = sumC[i][x_hs+S-1] - sumC[i][x_hs-1]
if x_s == 0:
ctotal_tmp = sumC[i][x_s+B-1] - anasum
else:
ctotal_tmp = (sumC[i][x_s+B-1] - sumC[i][x_s-1]) - anasum
ctotal += ctotal_tmp
print(ctotal)