아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

바이너리 행렬

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

요약
0과 1로 이루어진 행렬에서 최소 횟수로 원소를 뒤집어 모든 행의 1의 개수가 같고 모든 열의 1의 개수가 같도록 만들고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

유형
그리디, 조합론, 구현, 수학
정답자
아직 제출이 없습니다

문제

크기가 r×cr \times c인 행렬이 주어진다. 행렬의 각 원소는 00 또는 11이다. 한 번의 연산으로 원소 하나를 뒤집을 수 있다. 즉, 00은 11로, 11은 00으로 바꾼다. 이 연산을 여러 번 수행하여 다음 두 조건을 모두 만족하는 행렬을 만들려고 한다.

  1. 모든 행에 들어 있는 11의 개수가 서로 같다.
  2. 모든 열에 들어 있는 11의 개수가 서로 같다.

주어진 행렬을 위 두 조건을 만족하는 행렬로 바꾸는 데 필요한 연산의 최소 횟수를 구하여라.

입력

첫째 줄에 테스트 케이스의 개수 TT (T≤1000T \le 1000)가 주어진다.

각 테스트 케이스의 첫째 줄에는 두 정수 rr과 cc (1≤r,c≤401 \le r, c \le 40)가 주어진다. rr은 행의 수, cc는 열의 수이다. 이어지는 rr개의 줄에는 각각 cc개의 숫자가 공백 없이 주어지며, 이는 행렬의 각 원소를 나타낸다.

출력

각 테스트 케이스마다 Case #: R 형식으로 한 줄에 출력한다. 여기서 #는 테스트 케이스의 번호(11부터 시작)이고, R은 주어진 행렬을 조건에 맞는 행렬로 바꾸는 데 필요한 연산의 최소 횟수이다. 바꾸는 것이 불가능한 경우에는 R 대신 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    3
    2 3
    111
    111
    3 3
    011
    011
    011
    2 3
    001
    000
    
    예상 출력
    Case 1: 0
    Case 2: 3
    Case 3: 1