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

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

레이저 빔 반사

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

요약
거울이 최대 5개이고 최단 경로의 반사 횟수가 6회 미만일 때, 생성기에서 목표물까지 가는 최단 경로의 길이를 소수점 셋째 자리까지 구한다.
난이도

어려움10점 중 8점

유형
기하, 완전 탐색, DFS
정답자
아직 제출이 없습니다

문제

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

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

가능한 경로의 예

입력

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

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

nn PX1 PY1 QX1 QY1PX_1\ PY_1\ QX_1\ QY_1 ⋮\vdots PXn PYn QXn QYnPX_n\ PY_n\ QX_n\ QY_n TX TYTX\ TY LX LYLX\ LY

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

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

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

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

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

가장 짧은 경로의 예

출력

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

예제1

  1. 예제 1

    입력
    2
    30 10 30 75
    60 30 60 95
    90 0
    0 100
    1
    20 81 90 90
    10 90
    90 10
    2
    10 0 10 58
    20 20 20 58
    0 70
    30 0
    4
    8 0 8 60
    16 16 16 48
    16 10 28 30
    16 52 28 34
    24 0
    24 64
    5
    8 0 8 60
    16 16 16 48
    16 10 28 30
    16 52 28 34
    100 0 100 50
    24 0
    24 64
    0
    
    예상 출력
    180.278
    113.137
    98.995
    90.510
    90.510