자전거
시간 제한1초메모리 제한128 MB
가속도 제한이 있는 자전거가 주기적으로 바뀌는 여러 신호등을 통과해 목적지에 도달하는 최단 시간을 구하는 문제입니다.
문제
도시에서 자전거를 탈 때, 교통 신호를 기다리는 시간은 전체 이동 시간에서 큰 비중을 차지한다. 자전거로 더 빨리 이동하려면 이 시간을 줄여야 한다.
신호 때문에 낭비되는 시간은 단순히 빨간불을 기다리는 시간만이 아니다. 초록불로 바뀐 뒤에 자전거를 다시 가속하는 데에도 시간이 들기 때문이다.
자전거의 움직임을 다음과 같이 모델링한다.
- 자전거는 앞으로 나아가거나 제자리에 멈춰 있을 수 있으며, 뒤로는 갈 수 없다. 최대 속도 제한은 없다.
- 자전거의 가속도는 최대 이다. (매초 최대 만큼 속도를 높일 수 있다.)
- 자전거는 현재 속도 이하의 임의의 속도( 포함)로 즉시 감속할 수 있다.
- 빨간불인 신호등은 통과할 수 없다. 즉 그 위치에서는 빨간불 동안 앞으로 나아갈 수 없다.
- 각 신호등은 빨간불과 초록불이 일정한 주기로 번갈아 바뀐다. (노란불은 없다.)
이 모델은 이론적인 것으로 실제 현상과는 차이가 있다.
라이더는 시간 에 위치 에서 속도 으로 정지해 있다. 목적지 까지 최대한 빨리 도착하려고 한다. 모든 신호등을 초록불일 때에만 통과하면서 에 도착할 수 있는 가장 빠른 시간을 구하여라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 파일의 끝까지 각 테스트 케이스를 처리한다.
각 테스트 케이스의 첫째 줄에는 목적지의 좌표 와 신호등의 개수 이 주어진다. (, )
이어지는 개의 줄에는 신호등 정보가 좌표가 증가하는 순서로 주어진다. 각 줄에는 신호등의 위치 (), 빨간불이 지속되는 시간 (), 초록불이 지속되는 시간 ()가 주어진다.
모든 신호등은 에 빨간불로 시작하며, 신호등 는 에 처음으로 초록불이 된다. 그 후 초록불이 초 동안 유지되었다가 다시 빨간불로 바뀌며, 이 주기가 반복된다.
두 신호등이 같은 위치에 있는 경우는 없다. 모든 값은 실수일 수 있다.
출력
각 테스트 케이스마다, 목적지에 도착할 수 있는 가장 빠른 시간을 소수점 셋째 자리까지 반올림하여 한 줄에 출력한다.