페이지

1080번: 행렬

https://www.acmicpc.net/problem/1080


$O(n^2)$

왼쪽위부터 비교하며 다르면 주위 3*3 구역을 바꾸어 준다.


#include<cstdio>
int n, m, r;
char a[50][51], b[50][51];
int main() {
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)scanf("%s", a[i]);
    for (int i = 0; i < n; i++)scanf("%s", b[i]);
    for (int i = 0; i < n - 2; i++) {
        for (int j = 0; j < m - 2; j++) {
            if (a[i][j] == b[i][j]) continue;
            for (int k = i; k < i + 3; k++)
                for (int l = j; l < j + 3; l++) a[k][l] = '1' + '0' - a[k][l];
            r++;
        }
    }
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (a[i][j] ^ b[i][j]) r = -1;
    printf("%d", r);
    return 0;
}

댓글 없음 :

댓글 쓰기