만드는 중입니다

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

픽셀화된 원

메모리 제한1024 MB

요약
반지름 R이 주어질 때, 거리를 반올림해 채운 원과 반지름 0부터 R까지 둘레를 겹쳐 그린 그림에서 색이 다른 픽셀 수를 구합니다.
난이도

보통10점 중 6점

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

문제

일반적인 컴퓨터 화면 이미지는 단색의 작은 정사각형인 픽셀이 모인 행렬이다. 픽셀 행렬의 축과 완전히 평행하지 않은 선을 그리면 왜곡이 생긴다. 원을 그릴 때 이 왜곡이 특히 두드러진다.

가로세로 2R+12\mathbf{R}+1 픽셀인 그림이 있다고 하자. 행과 열은 −R-\mathbf{R}부터 R\mathbf{R}까지 번호를 매기며, 가운데 픽셀이 행 0, 열 0이 된다. 처음에는 모든 픽셀이 흰색이다. 그림 중앙에 있는 반지름 R\mathbf{R}의 원은 아래 의사코드로 검은색으로 그릴 수 있다. set_pixel_to_black(x, y)는 행 x, 열 y의 픽셀을 검은색으로 칠한다.

draw_circle_perimeter(R):
  for x between -R and R, inclusive {
    y = round(sqrt(R * R - x * x))   # 가장 가까운 정수로 반올림하되, 동점이면 0 쪽으로 반올림
    set_pixel_to_black(x, y)
    set_pixel_to_black(x, -y)
    set_pixel_to_black(y, x)
    set_pixel_to_black(-y, x)
  }

같은 픽셀이 여러 번 검은색으로 칠해질 수 있지만, 이 연산은 멱등이다. 이미 검은 픽셀에 set_pixel_to_black을 다시 호출해도 아무것도 바뀌지 않는다.

다음 의사코드는 모두 흰색인 그림에서 시작해 채워진 원을 그린다.

draw_circle_filled(R):
  for x between -R and R, inclusive {
    for y between -R and R, inclusive {
      if round(sqrt(x * x + y * y)) ≤ R:
        set_pixel_to_black(x, y)
    }
  }

다음 의사코드는 채워진 원을 잘못 그린다.

draw_circle_filled_wrong(R):
  for r between 0 and R, inclusive {
    draw_circle_perimeter(r)
  }

R\mathbf{R}이 주어졌을 때, draw_circle_filled(R\mathbf{R})을 호출한 그림과 draw_circle_filled_wrong(R\mathbf{R})을 호출한 그림에서 색이 다른 픽셀의 개수를 구하라.

입력

첫 줄에 테스트 케이스의 개수 T\mathbf{T}가 주어진다. 이어서 T\mathbf{T}개의 줄에 테스트 케이스가 한 줄씩 주어지며, 각 줄에는 그릴 원의 반지름 R\mathbf{R}을 나타내는 정수 하나가 있다.

출력

각 테스트 케이스마다 한 줄에 Case #x: y를 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작)이고, y는 draw_circle_filled(R\mathbf{R})을 호출한 그림과 draw_circle_filled_wrong(R\mathbf{R})을 호출한 그림에서 색이 다른 픽셀의 개수이다.

제한

1≤T≤1001 \le \mathbf{T} \le 100.

힌트

샘플 케이스 1에서 draw_circle_filled(2)는 검은 픽셀 21개를 그린다(왼쪽 그림). draw_circle_filled_wrong(2)는 검은 픽셀 17개를 그린다(오른쪽 그림). 두 그림에서 색이 다른 픽셀은 네 개이며, (−1,−1)(-1, -1), (−1,1)(-1, 1), (1,−1)(1, -1), (1,1)(1, 1)이다. 여기서 (x,y)(x, y)는 행 x, 열 y의 픽셀을 뜻한다.

샘플 케이스 2에서 왼쪽 그림은 draw_circle_filled(8)로, 오른쪽 그림은 draw_circle_filled_wrong(8)로 생성된 것이다.

예제1

  1. 예제 1

    입력
    3
    2
    8
    50
    
    예상 출력
    Case #1: 4
    Case #2: 24
    Case #3: 812