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

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

프랙탈 케이크

면접 대비

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

요약
4x4 블록마다 가운데 2x2를 초콜릿으로 칠하는 과정을 N번 반복해 만든 2^(N+1) 격자에서 주어진 직사각형 부분의 무늬를 출력한다.
난이도

보통10점 중 6점

유형
분할 정복, 재귀, 구현, 수학
정답자
아직 제출이 없습니다

문제

표도르는 오늘 생일을 맞이했다. 손님들이 오기 전에 그는 특별한 방법으로 케이크를 초콜릿 크림으로 장식한다.

처음에 케이크는 하나의 정사각형이며, 4개의 같은 크기의 흰색 정사각형 칸으로 나뉘어 있다. 즉 2×22 \times 2 격자이다.

표도르는 다음 과정을 한 번의 프랙탈화라고 부른다.

  1. 현재의 모든 칸을 겹치지 않는 2×22 \times 2 묶음으로 나눈다. 어떤 칸도 묶이지 않은 채 남지 않는다.
  2. 각 칸을 다시 4개의 같은 칸으로 나눈다. 그러면 각 2×22 \times 2 묶음은 4×44 \times 4 묶음이 된다. 새로 생긴 칸은 원래 칸의 색을 그대로 물려받는다.
  3. 각 4×44 \times 4 묶음의 가운데 4칸(중앙의 2×22 \times 2)을 초콜릿으로 채운다.

표도르는 한 번의 프랙탈화로 멈추지 않고, 현미경이 필요할 때까지 이 과정을 N번 반복한다. 아래 그림은 처음 케이크, 첫 번째 프랙탈화 결과, 그리고 다섯 번째 프랙탈화 이후의 케이크를 보여 준다.

N번의 프랙탈화가 끝나면 케이크는 2N+1×2N+12^{N+1} \times 2^{N+1} 크기의 격자가 된다. 표도르는 케이크의 어떤 직사각형 부분의 무늬를 빠르게 보여 주는 프로그램을 원한다.

입력

한 줄에 다섯 개의 음이 아닌 정수 N, R1, R2, C1, C2가 주어진다.

  • N — 프랙탈화 반복 횟수 (N<20N < 20)
  • R1, R2 — 살펴볼 부분의 첫 행과 마지막 행
  • C1, C2 — 살펴볼 부분의 첫 열과 마지막 열

행과 열은 0부터 번호를 매긴다. 다음 조건이 성립한다: R1≤R2R1 \le R2, C1≤C2C1 \le C2; 0≤R2−R1<1000 \le R2 - R1 < 100, 0≤C2−C1<1000 \le C2 - C1 < 100; 0≤R1,R2,C1,C2<2N+10 \le R1, R2, C1, C2 < 2^{N+1}.

출력

R2−R1+1R2 - R1 + 1개의 줄을 출력하며, 각 줄은 C2−C1+1C2 - C1 + 1개의 문자를 담는다. 각 문자는 하나의 칸에 대응하며, 그 칸이 초콜릿으로 채워져 있으면 1, 아니면 0이다.

예제3

  1. 예제 1

    입력
    1 0 3 0 3
    
    예상 출력
    0000
    0110
    0110
    0000
    
  2. 예제 2

    입력
    2 0 3 0 3
    
    예상 출력
    0000
    0110
    0111
    0011
    
  3. 예제 3

    입력
    13 50 55 95 100
    
    예상 출력
    101111
    100111
    100111
    101111
    101101
    100001