굴착이냐 등반이냐

지형 단면이 꺾은선으로 주어질 때, 표면을 따라 걷거나 같은 높이의 두 점 사이를 수평으로 굴착해 첫 점에서 마지막 점까지 가는 최소 시간을 구한다.

어려움8그래프최단 경로기하구현아직 제출이 없습니다시간 제한8초메모리 제한512 MB

문제

베냐민 포레스트 8세는 한 나라의 왕이다. 절친한 친구 노드는 성에서 멀리 떨어진 마을에 산다. 노드가 중병에 걸려 목숨이 위태로워지자 왕은 신하 레드에게 좋은 약을 최대한 빨리 전하라고 명한다. 성에서 마을까지 이어진 길은 없다. 레드는 산을 넘고 협곡을 건너 마을에 닿아야 한다.

레드는 지도 위의 최단 경로, 즉 성과 마을을 잇는 직선을 따라 이동한다. 이 직선을 따라 자른 지형의 단면은 점 nn(x1,y1),,(xn,yn)(x_1, y_1), \dots, (x_n, y_n)을 차례로 잇는 꺾은선이다.

성에서 마을로 가는 경로의 예

그림 1. 성에서 마을로 가는 경로의 예

xix_i는 성에서 점 ii까지의 수평 거리이고, yiy_i는 점 ii의 높이다. 성은 (x1,y1)(x_1, y_1)에 있고 마을은 (xn,yn)(x_n, y_n)에 있다.

레드는 지표면 위를 속도 vwv_w로 걷는다. 또 산을 수평으로 뚫는 기술이 있어서 산 속을 속도 vcv_c로 이동한다.

레드가 쓸 수 있는 이동은 두 가지다. 첫째는 꺾은선 위를 걷는 이동으로, 왼쪽으로도 오른쪽으로도 갈 수 있다. 걸리는 시간은 지나간 꺾은선의 길이를 vwv_w로 나눈 값이다. 둘째는 산을 뚫고 지나가는 이동이다. 꺾은선 위의 두 지점 (a,y)(a, y)(b,y)(b, y)의 높이가 같고 a<ba < b이며 a<x<ba < x < b인 모든 xx에서 지형의 높이가 yy보다 크면, 레드는 두 지점 사이를 수평 직선을 따라 오갈 수 있다. 걸리는 시간은 (ba)/vc(b - a) / v_c다. 두 지점 사이의 어느 한 곳에서라도 지형의 높이가 yy 이하이면 그 구간은 산 속이 아니므로 뚫고 지나갈 수 없다.

성에서 마을까지 가는 데 걸리는 최소 시간을 구하는 프로그램을 작성하라.

입력

입력은 여러 데이터 세트로 이루어진다. 각 데이터 세트의 형식은 다음과 같다.

n
vw vc
x1 y1
...
xn yn

첫 줄에 점의 개수 nn이 주어진다. 둘째 줄에 걷는 속도 vwv_w와 뚫는 속도 vcv_c가 주어진다. 이어지는 nn개 줄에 각 점의 좌표 xix_iyiy_i가 주어진다.

2n10002 \le n \le 1000, 1vw,vc101 \le v_w, v_c \le 10, 10000xi,yi10000-10000 \le x_i, y_i \le 10000이고, i<ji < j이면 xi<xjx_i < x_j다. 입력의 모든 값은 정수다.

nn00인 줄이 나오면 입력이 끝난다. 이 줄은 데이터 세트가 아니므로 처리하지 않는다.

출력

각 데이터 세트마다 마을에 도착하는 데 걸리는 최소 시간을 한 줄에 출력한다. 값은 소수점 아래 여섯째 자리까지 반올림하고, 여섯 자리를 모두 적는다. 그 밖의 문자나 공백은 출력하지 않는다.