동전 뒤집기

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

요약
0은 앞면, 1은 뒷면을 나타내는 N×N 격자가 주어질 때, 모든 동전을 앞면으로 만드는 직사각형 뒤집기 시행을 ceil((N+1)/2)^2개 이하로 출력한다.
난이도

보통10점 중 7점

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

문제

N×NN \times N 크기의 정사각형 격자에 동전들이 놓여 있다. 각 칸에는 동전이 하나씩 놓여있으며, 각 동전은 앞면 또는 뒷면이 위를 보고 있다. 다음의 시행을 최대 ⌈N+12⌉2\left\lceil \cfrac {N+1}{2} \right\rceil ^2번 하여 모든 동전의 앞면이 위를 보게 하자.

  • 네 정수 y_1y\_1, x_1x\_1, y_2y\_2, x_2x\_2 (1≤y_1≤y_2≤N;1≤x_1≤x_2≤N)(1\leq y\_1\leq y\_2\leq N; 1\leq x\_1 \leq x\_2 \leq N)을 고른 후 y_1≤i≤y_2y\_1 \leq i \leq y\_2, x_1≤j≤x_2x\_1 \leq j \leq x\_2를 만족하는 모든 순서쌍 (i,j)(i, j)에 대해 ii행 jj열에 있는 동전을 뒤집는다.

주어진 문제 조건에서 항상 가능함을 보일 수 있다. 단, 해당 시행의 횟수를 최소화할 필요는 없다.

입력

첫째 줄에 격자의 크기를 나타내는 정수 NN이 주어진다. (1≤N≤250)(1\leq N \leq 250)

둘째 줄부터 N+1N+1번째 줄까지 동전의 상태를 나타내는 문자열이 주어진다. i+1i+1번째 줄 jj번째 문자는 ii행 jj열에 있는 동전의 상태를 나타내고 앞면이 위를 향하도록 놓인 경우 0, 뒷면이 위를 향하도록 놓인 경우 1로 표시된다.

출력

첫째 줄에 시행의 횟수 KK를 출력한다.

둘째 줄부터 K+1K+1번째 줄까지 시행을 나타내는 네 정수 y_1y\_1, x_1x\_1, y_2y\_2, x_2x\_2를 공백으로 구분해 출력한다.

예제1

  1. 예제 1

    입력
    3
    011
    101
    010
    
    예상 출력
    3
    2 1 2 3
    1 2 3 2
    1 3 1 3