만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

행렬 변환

시간 제한2초메모리 제한128 MB

요약
0과 1로 이루어진 두 행렬이 주어질 때, 3x3 부분행렬을 뒤집는 연산으로 A를 B로 만드는 최소 연산 횟수를 구하고 불가능하면 -1을 출력합니다.
난이도

보통10점 중 6점

유형
그리디, 행렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

0과 1로만 이루어진 두 행렬 A와 B가 있습니다. 한 번의 연산으로 임의의 3×3 부분 행렬을 골라 그 안의 모든 원소를 뒤집을 수 있습니다. 즉 0은 1로, 1은 0으로 바뀝니다.

행렬 A를 행렬 B와 같게 만들기 위해 필요한 최소 연산 횟수를 구하세요.

입력

첫째 줄에 행렬의 크기 N과 M이 주어집니다. N과 M은 50 이하의 자연수입니다.

이어서 N개의 줄에 행렬 A가 주어지고, 그 다음 N개의 줄에 행렬 B가 주어집니다. 각 행은 0과 1로만 이루어진 길이 M의 문자열입니다.

출력

행렬 A를 행렬 B로 바꾸는 데 필요한 최소 연산 횟수를 출력합니다. 불가능하면 -1을 출력합니다.

예제4

  1. 예제 1

    입력
    3 4
    0000
    0010
    0000
    1001
    1011
    1001
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 3
    111
    111
    111
    000
    000
    000
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 1
    1
    0
    
    예상 출력
    -1
    
  4. 예제 4

    입력
    18 3
    001
    100
    100
    000
    011
    010
    100
    100
    010
    010
    010
    110
    101
    101
    000
    110
    000
    110
    001
    100
    011
    000
    100
    010
    011
    100
    101
    101
    010
    001
    010
    010
    111
    110
    111
    001
    
    예상 출력
    7