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

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

프랙탈

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

요약
너비가 주어진 블록 프랙탈을 (0,1)에서 (width,1)까지 그리고, 수직선 x가 선분과 만나는 모든 정수 y를 오름차순으로 출력한다.
난이도

보통10점 중 6점

유형
재귀, 구현, 시뮬레이션, 기하
정답자
아직 제출이 없습니다

문제

프랙탈은 전체 모양의 패턴이 도형의 각 부분에서 자기 자신과 똑같이 반복되는 기하학적 도형입니다. 아래에서 설명하는 간단한 "블록 프랙탈"을 생각해 봅시다. 프랙탈이 성장하는 각 단계에서 프랙탈의 모든 선분은 길이가 같은 세 부분으로 나뉩니다. 첫 번째와 마지막 부분은 곧게 유지되지만, 가운데 부분은 그 부분의 너비와 같은 높이를 가진 정사각형 모양의 "돌기(bump)"로 바뀝니다. (선분이 향할 수 있는 네 가지 방향을 고려해야 합니다. 지금 그리고 있는 선분이 어느 방향을 향하는지에 따라 돌기는 위, 아래, 왼쪽 또는 오른쪽으로 튀어나올 수 있습니다.)

이 프랙탈을 데카르트 좌표평면 위에 그리고 (0,0)(0, 0)을 왼쪽 아래 모서리로 둡니다. 프랙탈의 왼쪽 아래 끝점은 (0,1)(0, 1), 오른쪽 아래 끝점은 (width,1)(\text{width}, 1)에 놓입니다. 예를 들어 너비가 2727인 레벨 33 프랙탈에서 가장 높은 부분은 (13,14)(13, 14)에서 (14,14)(14, 14)로 이어지는 선분입니다.

왼쪽 아래 모서리가 (0,1)(0, 1)에 놓인 "블록 프랙탈"의 선분들이 지나가는 정수 좌표점을 추적하는 프로그램을 작성하세요. 세로선 xx가 프랙탈의 선분과 만나는 모든 정수 yy 좌표를 구하면 됩니다.

디버깅이나 흥미를 위해 프랙탈을 그림으로 그려 봐도 좋지만, 한 화면에 담기 어려울 만큼 큰 프랙탈이 주어질 수도 있습니다.

입력

한 줄에 세 정수 레벨 level\text{level}, 너비 width\text{width}, x좌표 xx가 공백으로 구분되어 주어집니다. 너비는 33의 거듭제곱이며, 프랙탈의 모든 모서리가 정수 격자점 위에 놓일 만큼 충분히 큽니다(즉 width\text{width}는 3level3^{\text{level}}의 배수입니다). 너비는 8181을 넘지 않습니다. xx는 0≤x≤width0 \le x \le \text{width}인 정수입니다.

출력

점 (x,y)(x, y)가 프랙탈의 선분 위에 놓이는 모든 정수 yy 값을 오름차순으로 정렬하여 공백으로 구분해 한 줄에 출력하세요.

예제4

  1. 예제 1

    입력
    3 27 5
    
    예상 출력
    4 5 6
    
  2. 예제 2

    입력
    3 27 18
    
    예상 출력
    1 2 3 4 7 8 9 10
    
  3. 예제 3

    입력
    2 27 19
    
    예상 출력
    1 4 7
    
  4. 예제 4

    입력
    4 81 38
    
    예상 출력
    37 38 39