기름이 떨어진 언덕길 (큰 입력)

중력으로 내려가는 차를 브레이크로 조절해 앞차를 추월하지 않고 목표 지점까지 최단 시간에 도달합니다.

보통7그리디수학시뮬레이션아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

언덕 꼭대기에서 차의 기름이 떨어졌다. 집은 언덕 아래에 있으니 최대한 빨리 내려가고 싶다. 문제는 바로 앞에 다른 차가 한 대 있어서 그 차를 앞지를 수 없다는 것이다. 다행히 브레이크는 아주 잘 듣는다.

시각 00초에 언덕 꼭대기에서 속력 0 m/s0\ \text{m/s}로 출발한다. 중력은 언덕을 따라 내려가는 방향으로 일정한 가속도를 준다. 어느 순간에나 브레이크를 밟아 속력을 줄이거나, 그 순간의 가속도를 원하는 만큼 줄일 수 있다.

브레이크를 가장 잘 썼을 때 집까지 걸리는 최소 시간을 구하라.

제약

  • 1T201 \le T \le 20
  • 1.0D1041.0 \le D \le 10^4
  • 1N20001 \le N \le 2000
  • 1A2501 \le A \le 250
  • 1.00ai9.811.00 \le a_i \le 9.81
  • 0.0ti1050.0 \le t_i \le 10^5, t0=0t_0 = 0, ti<ti+1t_i < t_{i+1}
  • 0.0xi1050.0 \le x_i \le 10^5, xi<xi+1x_i < x_{i+1}
  • xN1Dx_{N-1} \ge D

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 줄에는 실수 DD와 정수 NN, AA가 공백으로 구분되어 주어진다. DD는 언덕을 따라 집까지 내려가야 하는 거리이고 단위는 미터이며, 소수점 아래 여섯 자리까지 주어진다.

다음 NN개의 줄에는 각각 실수 tit_i(초)와 xix_i(미터)가 공백으로 구분되어 주어진다. tit_ixix_i도 소수점 아래 여섯 자리까지 주어진다.

그다음 줄에는 실수 aia_iAA개, 공백으로 구분되어 주어진다. 단위는 m/s2\text{m/s}^2이고 소수점 아래 두 자리까지 주어진다.

앞차의 위치는 (ti,xi)(t_i, x_i) 쌍으로 정해진다. 시각 tit_i초에 앞차는 언덕 꼭대기, 즉 내 출발 지점에서 xix_i미터 아래에 있다. 앞차는 시각 tit_iti+1t_{i+1} 사이를 일정한 속력으로 움직인다. 시각과 위치는 모두 증가하는 순서로 주어지고 t0=0t_0 = 0이다.

예를 들어 t5=10t_5 = 10, x5=20x_5 = 20, t6=20t_6 = 20, x6=40x_6 = 40이면 출발 1010초 뒤 앞차는 2020미터 아래에, 1515초 뒤에는 3030미터 아래에, 2020초 뒤에는 4040미터 아래에 있다.

출력

각 테스트 케이스마다 먼저 Case #c:를 출력한다. cc11부터 시작하는 테스트 케이스 번호다.

이어서 AA개의 줄을 출력한다. ii번째 줄에는 중력에 의한 가속도가 aia_i일 때 브레이크를 가장 잘 써서 집에 도착하는 최소 시간을 초 단위로 출력한다. 각 값은 소수점 아래 여섯 자리로 반올림해 정확히 여섯 자리를 출력한다. 출력에 빈 줄은 없다.

노트

위치와 가속도. 일정한 가속도 a m/s2a\ \text{m/s}^2와 초기 속력 v0 m/sv_0\ \text{m/s}로 움직이는 물체는 tt초 동안 v0t+12at2v_0 t + \frac{1}{2} a t^2만큼 이동한다.

경사면 위의 거리. 모든 거리와 가속도는 언덕을 따라 내려가는 직선 방향으로 잰다. 수평 방향 거리가 아니다. 초기 속력이 0 m/s0\ \text{m/s}이고 가속도가 2 m/s22\ \text{m/s}^2인데 앞차가 x=1x = 1에 멈춰 있다면, 앞차에 닿기까지 정확히 11초가 걸린다.

앞차. 앞차를 절대 앞지를 수 없다. 즉 어느 시각에도 내가 내려온 거리가 앞차가 내려온 거리보다 클 수 없다. 두 거리가 같은 것은 괜찮다. 두 차는 모두 질점으로 본다.

마지막 점 이후. 앞차는 뒤로 가지 않고 xN1Dx_{N-1} \ge D이므로, 시각 tN1t_{N-1} 이후의 앞차 위치는 나를 막지 않는다.