잠수부

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

요약
밧줄을 따라 위아래로 움직이는 다이버가 삼각파처럼 좌우로 진동하는 상어들과 반경 r 이내로 가까워지지 않으면서 수면까지 도달하는 최소 시간을 구하거나 불가능함을 판정하는 문제입니다.
난이도

보통10점 중 7점

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

문제

잠수부가 심해에서의 작업을 마치고 수면으로 올라가려고 합니다. 수면 위 보트에서 잠수부가 있는 수심 dd피트 지점까지 밧줄이 수직으로 내려와 있으며, 잠수부는 이 밧줄을 따라서만 위아래로 이동합니다.

그런데 작업하는 동안 밧줄 근처에 여러 마리의 상어가 모여들었습니다. 상어들은 아직 잠수부를 위협이나 먹이로 여기지 않지만, 잠수부가 어떤 상어와의 거리가 rr피트보다 가까워지면 그 상어는 즉시 잠수부를 공격합니다.

잠수병을 피하기 위해 잠수부는 1초에 최대 vdv_d피트의 속도로만 내려가거나 올라갈 수 있습니다. 또한 수심 dd피트보다 더 깊이 내려갈 수는 없습니다.

각 상어 ii는 자신만의 일정한 수심 did_i피트에서 밧줄 근처를 헤엄칩니다. 모든 상어의 속도와 움직임 방식은 동일합니다. 상어는 물속에서 가만히 있을 수 없어 가라앉지 않으려면 계속 헤엄쳐야 하므로, 일정한 속도 vsv_s로 밧줄에서 최대 ww피트까지 멀어졌다가 다시 밧줄로 돌아오는 왕복 운동을 반복합니다. 상어가 방향을 바꾸는 것은 매우 빨라 순간적으로 일어난다고 봅니다. 상어가 잠수부를 공격하는 것 역시 매우 빨라, 잠수부가 어떤 상어를 중심으로 반지름 rr피트인 원 안에 들어오는 순간 즉시 일어난다고 봅니다.

잠수부는 항상 밧줄 위(밧줄로부터의 수평 거리가 00)에 있으므로, 잠수부와 상어 사이의 거리는 두 수심의 차이와 상어가 밧줄에서 떨어진 수평 거리를 두 변으로 하는 직각삼각형의 빗변 길이, 즉 (수심 차이)2+(상어의 수평 거리)2\sqrt{(\text{수심 차이})^2 + (\text{상어의 수평 거리})^2} 입니다.

잠수부가 상어에게 공격받지 않고 수면까지 올라갈 수 있는지, 올라갈 수 있다면 가장 빠르게 걸리는 시간이 얼마인지 구하세요.

입력

입력의 첫 번째 줄에는 정수 6개가 주어집니다.

  • dd (10≤d≤10010 \le d \le 100) — 잠수부의 처음 수심.
  • vdv_d (1≤vd≤101 \le v_d \le 10) — 잠수부의 최대 속도.
  • nn (1≤n≤201 \le n \le 20) — 상어의 수.
  • rr (1≤r≤101 \le r \le 10) — 상어와 잠수부가 유지해야 하는 최소 안전 거리.
  • ww (10≤w≤10010 \le w \le 100) — 상어가 밧줄에서 멀어지는 최대 거리.
  • vsv_s (1≤vs≤501 \le v_s \le 50) — 상어의 속도.

이어서 nn개의 줄에 각 상어의 정보가 정수 3개씩 주어집니다.

  • did_i (1≤di<d1 \le d_i < d) — ii번째 상어의 수심.
  • wiw_i (0≤wi≤w0 \le w_i \le w) — ii번째 상어가 처음에 밧줄에서 떨어져 있는 거리.
  • fif_i (fif_i는 11 또는 −1-1) — ii번째 상어의 처음 이동 방향. 밧줄에서 멀어지는 방향이면 11, 밧줄로 다가오는 방향이면 −1-1.

처음에 잠수부는 모든 상어로부터 rr피트보다 멀리 떨어져 있습니다.

출력

잠수부가 수면에 도달할 수 없으면 IMPOSSIBLE을 출력합니다.

도달할 수 있으면 수면까지 올라가는 데 걸리는 최소 시간을 소수점 아래 첫째 자리까지 반올림하여 출력합니다. 반올림은 반올림(round half up) 규칙을 따릅니다.

예제1

  1. 예제 1

    입력
    10 1 2 1 10 1
    6 4 -1
    1 1 1
    
    예상 출력
    11.4