소행성

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

요약
두 개의 convex polyhedron을 회전, 이동시켜 겹치지 않고 표면끼리만 접하도록 하면서 두 무게중심 사이 거리를 최소화하는 문제입니다.
난이도

어려움10점 중 9점

유형
기하, 수학, 이분 탐색
정답자
아직 제출이 없습니다

문제

충돌 관리 협회(ACM)는 두 소행성을 제어된 방식으로 충돌시키려고 한다. 두 소행성을 아주 천천히 접근시켜 거의 0에 가까운 속도로 맞닿게 하면, 서로 달라붙어 하나의 안정된 물체를 이룬다고 가정한다.

각 소행성은 볼록 다면체 모양이다. 실험의 성공 확률을 높이기 위해, ACM은 두 소행성의 질량 중심이 가능한 한 가까워지도록 붙이고자 한다. 이를 위해 각 소행성을 독립적으로 회전시키고 평행이동시킬 수 있으나, 두 입체는 서로 겹칠 수 없으며 표면끼리 맞닿을 수만 있다.

두 질량 중심 사이에 도달할 수 있는 최소 거리를 구하여라.

질량 중심을 계산할 때 두 소행성의 밀도는 균일하다고 가정한다.

입력

입력은 두 볼록 다면체의 정보로 이루어진다.

각 다면체의 정보는 정점의 개수를 나타내는 정수 nn 으로 시작한다 (4≤n≤604 \le n \le 60). 이어지는 nn 개의 줄에는 각각 세 정수 xix_i, yiy_i, ziz_i, 즉 한 정점의 좌표가 주어진다 (−104≤xi,yi,zi≤104-10^4 \le x_i, y_i, z_i \le 10^4).

주어지는 점들은 반드시 볼록 다면체의 정점들이다. 어떤 점도 다른 점들의 볼록 껍질 내부에 있지 않으며, 각 다면체는 퇴화하지 않은(부피가 양수인) 입체이다. 두 다면체는 공통점을 갖지 않는다.

출력

두 질량 중심 사이에 도달할 수 있는 최소 거리를 소수점 아래 정확히 6자리로 반올림하여 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    8
    0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1
    5
    0 0 5
    1 0 6
    -1 0 6
    0 1 6
    0 -1 6
    
    예상 출력
    0.750000
    
  2. 예제 2

    입력
    8
    0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1
    8
    0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1
    
    예상 출력
    1.000000
    
  3. 예제 3

    입력
    6
    0 0 0
    4 0 0
    0 3 0
    0 0 10
    4 0 10
    0 3 10
    8
    0 0 0
    0 0 1
    0 2 0
    0 2 1
    2 0 0
    2 0 1
    2 2 0
    2 2 1
    
    예상 출력
    1.300000