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

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

에너지 아끼기

시간 제한8초메모리 제한512 MB

요약
3차원 공간의 무한 직선 N개가 주어질 때, 직선 위 이동은 공짜이고 직선을 벗어난 이동에만 거리가 드는 상황에서 출발점과 도착점 사이의 최소 에너지를 구한다.
난이도

어려움10점 중 8점

유형
기하, 그래프, 최단 경로, 수학
정답자
아직 제출이 없습니다

문제

마법 함정에 걸려 원인 모를 이유로 낯선 공간으로 이동했다. 이 공간은 3차원이고, 길이가 무한인 직선 경로가 여러 개 있다. 특별한 능력으로 출구가 어디인지 알아냈지만, 그곳까지 가는 일은 그리 쉽지 않다. 경로를 따라 이동할 때는 에너지를 쓰지 않고 자유롭게 움직일 수 있지만, 경로를 벗어나 이동할 때는 에너지를 써야 한다. 거리 1당 에너지 1이 필요하다. 에너지를 아끼고 싶은 당신은 컴퓨터의 도움을 받아 출구까지 가는 최적의 경로를 찾기로 했다.

주어진 출발점과 도착점 사이를 이동하는 데 필요한 최소 에너지를 계산하는 프로그램을 작성하시오. 각 경로의 폭은 무시할 수 있을 만큼 작고, 당신의 크기도 마찬가지다.

입력

입력은 여러 개의 데이터 세트로 이루어진다. 각 데이터 세트의 형식은 다음과 같다.

N
xs ys zs xt yt zt
x1,1 y1,1 z1,1 x1,2 y1,2 z1,2
    .
    .
    .
xN,1 yN,1 zN,1 xN,2 yN,2 zN,2

N은 직선 경로의 개수를 나타내는 정수이다(2 ≤ N ≤ 100). (xs, ys, zs)와 (xt, yt, zt)는 각각 출발점과 도착점의 좌표이다. (x**i,1, y**i,1, z**i,1)와 (x**i,2, y**i,2, z**i,2)는 i번째 직선 경로가 지나는 두 점의 좌표이다. 모든 좌표의 절댓값은 30,000을 넘지 않는다.

두 점 (xu, yu, zu)와 (xv, yv, zv) 사이의 거리는 유클리드 거리로 다음과 같이 주어진다.

(x_v−x_u)2+(y_v−y_u)2+(z_v−z_u)2\sqrt{(x\_v-x\_u)^2 + (y\_v-y\_u)^2 + (z\_v-z\_u)^2}

출발점과 도착점은 모두 경로 위에 있다. 또한 각 데이터 세트에는 거의 평행하지만 실제로는 평행하지 않은 직선 경로가 존재하지 않는다. 완전히 평행한 직선 경로는 존재할 수 있다.

입력의 끝은 0 하나만 있는 줄로 나타낸다. 이 줄은 어떤 데이터 세트에도 속하지 않는다.

출력

각 데이터 세트마다 필요한 에너지를 한 줄에 출력한다. 각 값은 소수점 이하 자릿수를 임의로 출력해도 되지만, 오차가 0.001을 넘어서는 안 된다.

예제1

  1. 예제 1

    입력
    2
    0 0 0 0 2 0
    0 0 1 0 0 -1
    2 0 0 0 2 0
    3
    0 5 0 3 1 4
    0 1 0 0 -1 0
    1 0 1 -1 0 1
    3 1 -1 3 1 1
    2
    0 0 0 3 0 0
    0 0 0 0 1 0
    3 0 0 3 1 0
    0
    
    예상 출력
    1.414
    2.000
    3.000