문제)
두 행렬 A와 B를 가지고 A -> B로 만들 수 있는 최소 횟수
단, A행렬을 변환할 때에는 3 * 3 역의 값을 반전 시킨다
마지막으로 A와 B를 비교 해서 같은지를 판별한다
#include<bits/stdc++.h>
using namespace std;
char A[55][55];
char B[55][55];
int n, m;
int cnt;
void init(char tmp[55][55]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> tmp[i][j];
}
}
}
void change(int y, int x) {
for (int i = y; i < y + 3; i++) {
for (int j = x; j < x + 3; j++) {
A[i][j] = A[i][j] == '0' ? '1' : '0';
}
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n >> m;
init(A); init(B);
for (int i = 0; i < n - 2; i++) {
for (int j = 0; j < m - 2; j++) {
if (A[i][j] != B[i][j]) {
change(i, j);
cnt++;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (A[i][j] != B[i][j]) {
cout << -1 << '\n';
return 0;
}
}
}
cout << cnt << '\n';
return 0;
}