만드는 중입니다

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

초콜릿 고리

면접 대비

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

요약
중심이 고리를 이루고 이웃한 구끼리만 겹치는 같은 반지름의 구 n개의 합집합 부피를 구합니다.
난이도

보통10점 중 4점

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

문제

초콜릿 고리 모양의 독특한 과자를 만들어 보자.

그림 A.1. 여섯 구의 합집합으로 만든 초콜릿 고리

고리 모양은 같은 크기의 구 여러 개의 합집합으로 만든다. 각 구는 정확히 다른 두 구와 교차한다.

(a) 네 구의 합집합(b) (a)의 네 구가 만드는 네 개의 교차 영역
그림 A.2. 네 구의 합집합으로 만든 초콜릿 고리

구의 크기와 위치가 주어졌을 때 구들의 합집합의 전체 부피, 즉 합집합으로 만든 고리를 채우는 데 필요한 초콜릿의 양을 계산하는 프로그램을 작성하라.

힌트 반지름이 rr인 두 구는 중심 사이 거리 dd가 2r2r보다 작을 때 서로 교차한다. 교차 부분의 부피는 다음과 같다.

23π(r−d/2)2(2r+d/2).\frac{2}{3}\pi (r - d/2)^2(2r+d/2).

반지름이 rr인 구의 부피는 4πr3/34\pi r^3/3이다.

입력

입력은 다음 형식의 단일 테스트 케이스로 주어진다.

n rx1 y1 z1⋮xn yn zn\begin{align*} & n \, r \\ & x_1 \, y_1 \, z_1 \\ & \vdots \\ & x_n \, y_n \, z_n \end{align*}

nn과 rr은 정수이다. nn은 구의 개수이다 (4≤n≤1004 \le n \le 100). 모든 구의 반지름은 rr로 같다 (2≤r≤1002 \le r \le 100). (xk,yk,zk)(x_k, y_k, z_k)는 kk번째 구의 중심 좌표이다 (k=1,…,nk = 1, \dots, n). xkx_k, yky_k, zkz_k는 모두 −100-100 이상 100100 이하의 정수이다.

1≤k<n1 \le k < n인 모든 kk에 대하여 kk번째 구와 k+1k+1번째 구는 교차한다. 11번째 구와 nn번째 구도 교차한다. 그 밖의 구 쌍은 교차하지 않는다.

출력

구들의 합집합의 부피를 한 줄에 출력한다. 출력의 상대 오차는 10−710^{-7} 이내여야 한다.

예제5

  1. 예제 1

    입력
    6 9
    20 0 10
    20 10 0
    10 20 0
    0 20 10
    0 10 20
    10 0 20
    
    예상 출력
    17149.528141
    
  2. 예제 2

    입력
    4 12
    10 10 0
    10 -10 0
    -10 -10 0
    -10 10 0
    
    예상 출력
    27813.56696
    
  3. 예제 3

    입력
    6 9
    23 3 13
    20 10 0
    10 20 0
    3 23 13
    0 10 20
    10 0 20
    
    예상 출력
    17470.837758
    
  4. 예제 4

    입력
    4 2
    0 0 0
    3 0 0
    3 3 0
    0 3 0
    
    예상 출력
    122.52211349
    
  5. 예제 5

    입력
    8 70
    100 100 0
    0 100 0
    -100 100 0
    -100 0 0
    -100 -100 0
    0 -100 0
    100 -100 0
    100 0 0
    
    예상 출력
    10220648.1