중력으로 내려가는 차를 브레이크로 조절해 앞차를 추월하지 않고 목표 지점까지 최단 시간에 도달합니다.
보통7그리디수학시뮬레이션아직 제출이 없습니다시간 제한5초메모리 제한512 MB언덕 꼭대기에서 차의 기름이 떨어졌다. 집은 언덕 아래에 있으니 최대한 빨리 내려가고 싶다. 문제는 바로 앞에 다른 차가 한 대 있어서 그 차를 앞지를 수 없다는 것이다. 다행히 브레이크는 아주 잘 듣는다.
시각 0초에 언덕 꼭대기에서 속력 0 m/s로 출발한다. 중력은 언덕을 따라 내려가는 방향으로 일정한 가속도를 준다. 어느 순간에나 브레이크를 밟아 속력을 줄이거나, 그 순간의 가속도를 원하는 만큼 줄일 수 있다.
브레이크를 가장 잘 썼을 때 집까지 걸리는 최소 시간을 구하라.
첫 줄에 테스트 케이스의 개수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 줄에는 실수 D와 정수 N, A가 공백으로 구분되어 주어진다. D는 언덕을 따라 집까지 내려가야 하는 거리이고 단위는 미터이며, 소수점 아래 여섯 자리까지 주어진다.
다음 N개의 줄에는 각각 실수 ti(초)와 xi(미터)가 공백으로 구분되어 주어진다. ti와 xi도 소수점 아래 여섯 자리까지 주어진다.
그다음 줄에는 실수 ai가 A개, 공백으로 구분되어 주어진다. 단위는 m/s2이고 소수점 아래 두 자리까지 주어진다.
앞차의 위치는 (ti,xi) 쌍으로 정해진다. 시각 ti초에 앞차는 언덕 꼭대기, 즉 내 출발 지점에서 xi미터 아래에 있다. 앞차는 시각 ti와 ti+1 사이를 일정한 속력으로 움직인다. 시각과 위치는 모두 증가하는 순서로 주어지고 t0=0이다.
예를 들어 t5=10, x5=20, t6=20, x6=40이면 출발 10초 뒤 앞차는 20미터 아래에, 15초 뒤에는 30미터 아래에, 20초 뒤에는 40미터 아래에 있다.
각 테스트 케이스마다 먼저 Case #c:를 출력한다. c는 1부터 시작하는 테스트 케이스 번호다.
이어서 A개의 줄을 출력한다. i번째 줄에는 중력에 의한 가속도가 ai일 때 브레이크를 가장 잘 써서 집에 도착하는 최소 시간을 초 단위로 출력한다. 각 값은 소수점 아래 여섯 자리로 반올림해 정확히 여섯 자리를 출력한다. 출력에 빈 줄은 없다.
위치와 가속도. 일정한 가속도 a m/s2와 초기 속력 v0 m/s로 움직이는 물체는 t초 동안 v0t+21at2만큼 이동한다.
경사면 위의 거리. 모든 거리와 가속도는 언덕을 따라 내려가는 직선 방향으로 잰다. 수평 방향 거리가 아니다. 초기 속력이 0 m/s이고 가속도가 2 m/s2인데 앞차가 x=1에 멈춰 있다면, 앞차에 닿기까지 정확히 1초가 걸린다.
앞차. 앞차를 절대 앞지를 수 없다. 즉 어느 시각에도 내가 내려온 거리가 앞차가 내려온 거리보다 클 수 없다. 두 거리가 같은 것은 괜찮다. 두 차는 모두 질점으로 본다.
마지막 점 이후. 앞차는 뒤로 가지 않고 xN−1≥D이므로, 시각 tN−1 이후의 앞차 위치는 나를 막지 않는다.