알고리즘
백준_16967_배열 복원하기
shj718
2022. 2. 21. 12:15
입력으로 주어진 배열에서 겹치는 부분이 어디인지만 파악하면 되는 간단한 문제였다.
겹치는 부분의 값만 arr[i-X][j-Y]를 뺀값으로 바꿔 준 후, 원래 배열 크기만큼 출력하면 된다.
https://www.acmicpc.net/problem/16967
16967번: 배열 복원하기
크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐
www.acmicpc.net
#include<iostream>
using namespace std;
int H, W, X, Y, arr[600][600], A[300][300];
void solve() {
for (int i = X; i < H; i++) {
for (int j = Y; j < W; j++) {
arr[i][j] = arr[i][j] - arr[i - X][j - Y];
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
A[i][j] = arr[i][j];
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> H >> W >> X >> Y;
for (int i = 0; i < H + X; i++) {
for (int j = 0; j < W + Y; j++) {
cin >> arr[i][j];
}
}
solve();
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cout << A[i][j] << ' ';
}
cout << '\n';
}
return 0;
}