자전거

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

요약
가속도 제한이 있는 자전거가 주기적으로 바뀌는 여러 신호등을 통과해 목적지에 도달하는 최단 시간을 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 그리디, 수학
정답자
아직 제출이 없습니다

문제

도시에서 자전거를 탈 때, 교통 신호를 기다리는 시간은 전체 이동 시간에서 큰 비중을 차지한다. 자전거로 더 빨리 이동하려면 이 시간을 줄여야 한다.

신호 때문에 낭비되는 시간은 단순히 빨간불을 기다리는 시간만이 아니다. 초록불로 바뀐 뒤에 자전거를 다시 가속하는 데에도 시간이 들기 때문이다.

자전거의 움직임을 다음과 같이 모델링한다.

  • 자전거는 앞으로 나아가거나 제자리에 멈춰 있을 수 있으며, 뒤로는 갈 수 없다. 최대 속도 제한은 없다.
  • 자전거의 가속도는 최대 0.5 m/s20.5\,\mathrm{m/s^2} 이다. (매초 최대 0.5 m/s0.5\,\mathrm{m/s} 만큼 속도를 높일 수 있다.)
  • 자전거는 현재 속도 이하의 임의의 속도(00 포함)로 즉시 감속할 수 있다.
  • 빨간불인 신호등은 통과할 수 없다. 즉 그 위치에서는 빨간불 동안 앞으로 나아갈 수 없다.
  • 각 신호등은 빨간불과 초록불이 일정한 주기로 번갈아 바뀐다. (노란불은 없다.)

이 모델은 이론적인 것으로 실제 현상과는 차이가 있다.

라이더는 시간 T=0T = 0에 위치 X=0X = 0에서 속도 00으로 정지해 있다. 목적지 X=XdestX = X_{dest}까지 최대한 빨리 도착하려고 한다. 모든 신호등을 초록불일 때에만 통과하면서 XdestX_{dest}에 도착할 수 있는 가장 빠른 시간을 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 파일의 끝까지 각 테스트 케이스를 처리한다.

각 테스트 케이스의 첫째 줄에는 목적지의 좌표 XdestX_{dest}와 신호등의 개수 LL이 주어진다. (1≤Xdest≤100001 \le X_{dest} \le 10000, 0≤L≤100 \le L \le 10)

이어지는 LL개의 줄에는 신호등 정보가 XX좌표가 증가하는 순서로 주어진다. 각 줄에는 신호등의 위치 XiX_i (0<Xi<Xdest0 < X_i < X_{dest}), 빨간불이 지속되는 시간 RiR_i (10≤Ri≤50010 \le R_i \le 500), 초록불이 지속되는 시간 GiG_i (10≤Gi≤50010 \le G_i \le 500)가 주어진다.

모든 신호등은 T=0T = 0에 빨간불로 시작하며, 신호등 ii는 T=RiT = R_i에 처음으로 초록불이 된다. 그 후 초록불이 GiG_i초 동안 유지되었다가 다시 빨간불로 바뀌며, 이 주기가 반복된다.

두 신호등이 같은 위치에 있는 경우는 없다. 모든 값은 실수일 수 있다.

출력

각 테스트 케이스마다, 목적지에 도착할 수 있는 가장 빠른 시간을 소수점 셋째 자리까지 반올림하여 한 줄에 출력한다.

예제4

  1. 예제 1

    입력
    410.0 2
    200.0 15.0 15.0
    225.0 31.0 10.0
    410.0 2
    200.0 15.0 15.0
    225.0 35.1 15.0
    410.0 2
    200.0 15.0 15.0
    225.0 45.0 10.0
    
    예상 출력
    41.497
    52.623
    57.213
    
  2. 예제 2

    입력
    100.0 0
    
    예상 출력
    20.000
    
  3. 예제 3

    입력
    500.0 1
    100.0 25.0 10.0
    
    예상 출력
    49.721
    
  4. 예제 4

    입력
    250.0 0
    250.0 1
    90.0 22.0 11.0
    700.0 2
    160.0 30.0 15.0
    360.0 50.0 20.0
    
    예상 출력
    31.623
    34.649
    64.968