문제 좀 잘 읽어라 내 자신아...
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)가 두 배열 모두에 포함되면,
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()