만드는 중입니다

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

행렬 변환

면접 대비

시간 제한1초메모리 제한1024 MB

요약
인접한 두 칸의 값을 동시에 1씩 더하거나 빼는 연산을 반복해 모든 칸을 0으로 만들 수 있는지 판별합니다.
난이도

보통10점 중 4점

유형
수학, 행렬, 구현
정답자
아직 제출이 없습니다

문제

정수 행렬 A가 있으며, 이 행렬은 R개의 행과 C개의 열로 이루어져 있다. 각 행에는 C개의 정수가 있다. 두 정수는 해당 칸이 변을 공유하면 인접하다고 한다. 예를 들어 아래 격자에서 (0, 1), (4, 5), (1, 4), (5, 2)는 인접하지만, (0, 4), (2, 6), (5, 7)은 인접하지 않다.

한 가지 연산만 할 수 있다. 각 단계에서 인접한 두 칸을 고른 뒤, 두 값을 모두 1 증가시키거나 모두 1 감소시킨다.

이 연산들로 행렬을 모든 원소가 0인 영행렬로 바꿀 수 있는지 판단하라.

입력

첫 줄에는 행렬의 개수를 나타내는 양의 정수 n이 주어진다. 각 행렬은 공백으로 구분된 R과 C가 적힌 줄로 시작한다(2≤R≤302 \le R \le 30, 2≤C≤302 \le C \le 30). 이어지는 R개의 줄에는 각각 C개의 정수가 주어진다. 각 정수는 −20-20 이상 +20+20 이하이다. 각 입력 행렬에는 0이 아닌 값이 적어도 하나 있다고 가정한다.

출력

각 행렬(테스트 케이스)마다 먼저 "Case #i:"를 출력한다. 여기서 i는 1부터 시작하는 테스트 케이스 번호다. 이어서 행렬을 영행렬로 바꿀 수 있으면 "YES", 그렇지 않으면 "NO"를 출력한다. 각 테스트 케이스의 출력 뒤에는 빈 줄을 하나 남긴다. 출력 형식은 예제 출력과 같이 맞춘다.

예제1

  1. 예제 1

    입력
    6
    3 3
    -2 2 2
    1 1 0
    2 -2 -2
    3 3
    -1 0 1
    -2 -1 1
    0 1 2
    3 3
    -1 0 1
    0 2 -1
    -1 1 2
    3 3
    -1 2 1
    -1 -1 -3
    1 1 -1
    2 3
    0 -2 3
    1 3 1
    2 3
    3 1 1
    2 0 1
    
    예상 출력
    Case #1: YES
    
    Case #2: NO
    
    Case #3: NO
    
    Case #4: YES
    
    Case #5: NO
    
    Case #6: YES