import
java.util.Scanner;
public
class
TernarySearch {
static
double
getDistance(
double
x1,
double
y1,
double
x2,
double
y2,
double
v) {
double
dx = x1 - x2;
double
dy = y1 - y2;
return
Math.sqrt(dx * dx + dy * dy) / v;
}
static
double
getTime(
double
yCrossingPoint,
double
x1,
double
y1,
double
x2,
double
y2,
double
v1,
double
v2) {
return
getDistance(x1, y1, yCrossingPoint,
0
, v1)
+ getDistance(yCrossingPoint,
0
, x2, y2, v2);
}
public
static
void
main(String[] args) {
int
x1 =
3
, y1 = -
20
, x2 =
3
, y2 =
25
, v1 =
40
, v2 =
5
;
if
(x1 > x2) {
int
temp = x1;
x1 = x2;
x2 = temp;
}
double
res = Double.POSITIVE_INFINITY;
double
lo = x1, hi = x2;
while
(lo <= hi) {
if
(lo == hi) {
res = Math.min(res, getTime(lo, x1, y1, x2, y2, v1, v2));
break
;
}
double
mid1 = lo + (hi - lo) /
3.0
;
double
mid2 = hi - (hi - lo) /
3.0
;
double
f1 = getTime(mid1, x1, y1, x2, y2, v1, v2);
double
f2 = getTime(mid2, x1, y1, x2, y2, v1, v2);
if
(f1 > f2) {
res = Math.min(res, f2);
lo = mid1 +
1
;
}
else
if
(f1 < f2) {
res = Math.min(res, f1);
hi = mid2 -
1
;
}
else
{
res = Math.min(res, f1);
lo = mid1 +
1
;
hi = mid2 -
1
;
}
}
System.out.printf(
"%.6f\n"
, res);
}
}