레이저 빔 반사

아직 제출이 없습니다시간 제한2초메모리 제한128 MB

문제

평면 위에 레이저 빔 발생기, 목표물, 그리고 몇 개의 거울이 놓여 있습니다. 거울은 평면에 수직으로 서 있으며, 거울의 양면은 모두 평평하여 빔을 반사합니다. 빔은 서로 다른 반사 과정을 거쳐 목표물에 도달할 수 있으므로, 목표물을 맞히는 처음 방향이 여러 가지일 수 있습니다. 발생기에서 목표물까지 이르는 가장 짧은 빔 경로를 찾아 그 길이를 구하세요.

아래 그림은 가능한 빔 경로의 예시이며, 굵은 선이 가장 짧은 경로입니다.

가능한 경로의 예

입력

입력은 여러 개의 데이터셋으로 이루어집니다. $0$ 하나만 있는 줄이 입력의 끝을 나타냅니다.

각 데이터셋의 형식은 다음과 같습니다. 데이터셋에서 $n$을 제외한 모든 값은 $0$ 이상 $100$ 이하의 정수입니다.

$n$ $PX_1\ PY_1\ QX_1\ QY_1$ $\vdots$ $PX_n\ PY_n\ QX_n\ QY_n$ $TX\ TY$ $LX\ LY$

데이터셋의 첫 줄에는 거울의 개수를 나타내는 정수 $n$ ($1 \le n \le 5$)이 주어집니다. 이어지는 $n$개의 줄은 거울의 배치를 나타내며, $(PX_i, PY_i)$와 $(QX_i, QY_i)$는 $i$번째 거울의 두 끝점입니다. 어떤 두 거울도 서로 닿지 않습니다. 마지막 두 줄은 목표물의 위치 $(TX, TY)$와 발생기의 위치 $(LX, LY)$입니다. 목표물과 발생기는 서로 떨어져 있고, 둘 다 모든 거울과도 떨어져 있습니다.

목표물과 발생기의 크기는 무시할 수 있을 만큼 작으며, 거울의 두께도 무시합니다.

또한 각 데이터셋에 대해 다음을 가정할 수 있습니다.

  • 발생기에서 목표물까지 이르는 경로가 적어도 하나 존재합니다.
  • 가장 짧은 경로에서 일어나는 반사 횟수는 $6$번 미만입니다.
  • 가장 짧은 경로는 어떤 거울의 끝점으로부터 $0.001$ 이내의 점에서 그 거울을 지나는 직선과 교차하거나 닿지 않습니다.
  • 빔이 어떤 거울의 끝점으로부터 $0.001$ 이내에서 그 거울의 직선에 도달했을 때 반사할지 통과할지를 임의로 선택할 수 있다고 하더라도, 그렇게 만들어지는 어떤 경로도 가장 짧은 경로보다 짧지 않습니다.
  • 발생기에서 임의의 방향으로 쏜 빔이 거울에 반사되거나 거울로부터 $0.001$ 이내로 지날 때, 빔과 거울이 이루는 각 $\theta$는 6번째 반사점에 도달하기 전까지 $\sin(\theta) > 0.1$을 만족합니다.

위의 첫 번째 그림은 첫 번째 예제 데이터셋에 해당합니다. 아래 그림은 나머지 예제 데이터셋에 대한 가장 짧은 경로를 보여 줍니다.

가장 짧은 경로의 예

출력

각 데이터셋에 대해, 발생기에서 목표물까지 이르는 가장 짧은 경로의 길이를 소수점 아래 정확히 세 자리로 반올림하여 한 줄에 출력하세요 (예: 90.510). 그 밖의 다른 문자는 출력하지 마세요.