포럼
문제 COCI00094

Slikar

스페셜 저지 — 출력을 사용자 정의 프로그램으로 검사하므로 여러 정답이 인정될 수 있습니다.
설명

Josip은 특이한 화가이다. 그는 \(N \times N\)개의 픽셀로 이루어진 그림을 그리려고 하는데, 여기서 \(N\)은 2의 거듭제곱(\(1, 2, 4, 8, 16\) 등)이다. 각 픽셀은 검은색 또는 흰색이다. Josip은 각 픽셀을 어떤 색으로 칠할지 이미 구상해 두었다.

Josip의 그림 그리는 과정이 특이하지 않았다면 아무 문제도 없었을 것이다. 그는 다음과 같은 재귀적 과정을 사용한다:

  • 그림이 픽셀 하나라면, 구상한 대로 그 픽셀을 칠한다.
  • 그렇지 않다면, 정사각형을 네 개의 더 작은 정사각형으로 나눈 뒤:
    1. 네 정사각형 중 하나를 골라 흰색으로 칠한다.
    2. 남은 세 정사각형 중 하나를 골라 검은색으로 칠한다.
    3. 남은 두 정사각형을 새로운 그림으로 보고 같은 세 단계 과정을 적용한다.

곧 그는 이 과정으로는 자신이 구상한 모든 그림을 그릴 수 없다는 것을 깨달았다. 여러분의 과제는 원하는 그림과의 차이가 최대한 작은 그림을 그리는 프로그램을 작성하는 것이다. 두 그림의 차이는 같은 위치에 있으면서 색이 다른 픽셀 쌍의 개수이다.

제약
입력 형식

첫째 줄에 Josip이 그리려는 그림의 크기인 정수 \(N\) (\(1 \le N \le 512\))이 주어진다. \(N\)\(2\)의 거듭제곱이다.

다음 \(N\)개의 줄에는 각각 \(N\)개의 숫자 \(0\) 또는 \(1\)이 주어진다. 이는 목표 그림의 흰색과 검은색 칸을 나타낸다.

출력 형식

첫째 줄에 얻을 수 있는 가장 작은 차이를 출력한다.

다음 \(N\)개의 줄에 Josip의 과정으로 그릴 수 있으면서 가장 작은 차이를 얻는 그림을 출력한다. 그림은 입력과 같은 형식이어야 한다.

참고: 출력의 둘째 부분(그림)은 유일하지 않을 수 있다. 올바른 출력이면 무엇이든 정답으로 인정된다.

채점: 전체 점수의 \(50\%\)에 해당하는 테스트 케이스에서는 \(N\)이 최대 \(8\)이다.

서브태스크
서브태스크점수설명

Subtask 1

50점

\(N \le 8\)

Subtask 2

50점

No additional constraints (\(N \le 512\)).

예제 1
입력
4
0001
0001
0011
1110
출력
1
0001
0001
0011
1111
예제 2
입력
4
1111
1111
1111
1111
출력
6
0011
0011
0111
1101
예제 3
입력
8
01010001
10100011
01010111
10101111
01010111
10100011
01010001
10100000
출력
16
00000001
00000011
00000111
00001111
11110111
11110011
11110001
11110000
문제 정보

riseoj 작성

출처 COCI 2008/2009 Contest 4

태그

평가 및 의견

Slikar

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Slikar

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8