[白俊]16967:アレイの復元


インプリメンテーション


アレイの復元

问题をよく読んでください.
2 4 1 1
1 2 3 4 0
5 7 9 11 4
0 5 6 7 8
もしあるならば、A列はx 1格y 1格を移動して、そして以下の変形を行います:
7, 9, 11, 4
5, 6, 7, 8
この図では、重複する部分はx+h,y+wの範囲で7,9,11である.
したがって、「(i,j)」が2つの配列に含まれている場合、
Bi,j = Ai,j + Ai-X,j-Y
はい.「条件により、A列は以下のように更新される.
最初は画像だけを見ていて問題がよく見えませんでしたが、
Ai,j = Bi,j + Bi-X,j-Y
ずっと間違っていたこの問題は次の反例で知ることができる.
3 3 1 1
1 1 1 0
1 3 2 1
1 2 3 1
0 1 1 1
답이 다르게 나옴 ~~암튼 문제를 잘 읽자 멍충아 ~~
import sys
input = sys.stdin.readline
h, w, x, y = map(int, input().split())
B  = []
for i in range(h+x):
	B.append(list(map(int, input().split())))

A = [[0]*(w+y) for _ in range(h+x)]
for i in range(h+x):
	for j in range(w+y):
    		# 겹치지 않는 부분은 그대로 들어감 , 겹치는 부분은 B 배열에서 A 배배열의 x, y만큼 돌아가서 빼줌
		if x <= i < x+h and y <= j < y+w:
			A[i][j] = B[i][j] - A[i-x][j-y]
		elif i < x or i >= x+h:
			A[i][j] = B[i][j]
		elif j < y or j >= y+w:
			A[i][j] = B[i][j]


for i in range(h):
	for j in range(w):
		print(A[i][j], end = ' ')
	print()