레이저 발사

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

요약
드로이드에서 제다이까지 각각 n번 이하로 반사되는 서로 다른 방향의 레이저 두 경로를 찾아 두 경로 길이 차의 최솟값을 구한다.
난이도

어려움10점 중 8점

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

문제

당신은 드로이드이며, 거울로 된 정사각형 방 안에 있는 제다이를 맞히려 합니다. 제다이는 광선검으로 레이저 하나를 막을 수 있으므로 정면으로 한 발만 쏘는 것은 소용이 없습니다. 대신 두 발의 레이저를 쏘아 서로 다른 두 방향에서 같은 순간에 제다이에게 도달하도록 하면, 제다이는 두 발을 동시에 막을 수 없습니다.

벽은 거울이라 레이저가 반사되지만, 거울이 완벽하지 않아 각 레이저는 사라지기 전까지 최대 nn번만 튕길 수 있습니다. 당신은 레이저 권총 두 자루와 드로이드의 반사 신경을 지녀, 두 발을 임의로 작은 간격(동시 발사 포함)으로 쏠 수 있습니다. 레이저의 속력이 일정하므로 두 발이 동시에 도달하려면 두 발을 쏘는 시간 간격이 두 경로 길이의 차이와 같아지며, 목표는 이 간격을 최소화하는 것입니다.

방은 한 변이 1,000,0001{,}000{,}000피트인 정사각형으로, 왼쪽 아래 꼭짓점이 (0,0)(0, 0), 오른쪽 위 꼭짓점이 (1,000,000,1,000,000)(1{,}000{,}000, 1{,}000{,}000)입니다. 당신은 (x1,y1)(x_1, y_1)에, 제다이는 (x2,y2)(x_2, y_2)에 있습니다. 여기저기 튕긴 레이저가 나중에 당신의 위치 (x1,y1)(x_1, y_1)를 다시 지나가더라도 그대로 진행합니다(직접 계획한 발사이므로 피할 수 있습니다). 그러나 레이저는 제다이의 위치 (x2,y2)(x_2, y_2)에 처음 도달하는 즉시 멈춥니다. 반사는 입사각과 반사각이 같다는 일반적인 규칙을 따르며 지연 시간을 추가하지 않습니다. 정확히 꼭짓점(코너)을 향해 쏜 레이저는 온 방향의 정반대로 되돌아 나오며, 이때 두 번 튕긴 것으로 셉니다. 레이저는 11나노초에 11피트를 이동합니다.

마지막에 같은 방향으로 도달하는 두 발은 하나의 각도로 취급합니다(제다이가 함께 막을 수 있습니다). 따라서 두 레이저는 반드시 서로 다른 방향에서 제다이에게 도달해야 합니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 공백으로 구분된 다섯 정수 x1x_1, y1y_1, x2x_2, y2y_2, nn이 한 줄에 주어집니다. (x1,y1)(x_1, y_1)은 당신의 위치, (x2,y2)(x_2, y_2)는 제다이의 위치, nn은 최대 반사 횟수입니다. 제약 조건은 1≤x1,y1,x2,y2≤999,9991 \le x_1, y_1, x_2, y_2 \le 999{,}999, 1≤n≤1001 \le n \le 100이며, 드로이드와 제다이는 항상 서로 다른 위치에 있습니다. 즉 (x1,y1)≠(x2,y2)(x_1, y_1) \ne (x_2, y_2)입니다. 0 0 0 0 00\ 0\ 0\ 0\ 0 줄은 입력의 끝을 나타내며 처리하지 않습니다.

출력

각 테스트 케이스마다 두 레이저를 쏘는 사이의 최소 지연 시간(나노초)을 소수점 아래 정확히 55자리로 반올림하여 한 줄에 출력합니다. 어떤 답도 반올림 경계로부터 10−610^{-6} 이내에 있지 않도록 테스트 데이터가 구성되어 있습니다.

예제3

  1. 예제 1

    입력
    100000 1 100000 999999 1
    100000 100000 800000 800000 1
    0 0 0 0 0
    
    예상 출력
    19801.94156
    0.00000
    
  2. 예제 2

    입력
    670488 116740 26226 777573 1
    0 0 0 0 0
    
    예상 출력
    37350.01672
    
  3. 예제 3

    입력
    848750 911528 6815 795668 2
    0 0 0 0 0
    
    예상 출력
    6067.74748