#include using namespace std; typedef long long ll; typedef pair pii; double tf, vf, hf, td, vd, hd; double gf = 1., gd = 3.; // gravity double tj, vjd; double frisbee_t_ground () { return sqrt(2 * hf / gf) + tf; } double dist () { return (frisbee_t_ground() - tf) * vf; } double max_t () { return max(frisbee_t_ground(), td + dist() / vd); } void calc_dog () { tj = sqrt(2 * hd / gd); vjd = tj * gd; } double frisbee_y_at (double t) { t = max(t, tf); return max(0., hf - 0.5 * gf * pow(t - tf, 2.)); } double dog_max_y_at (double t) { t = max(t, td); t = min(t, td + tj); return vjd * (t - td) - 0.5 * gd * pow(t - td, 2.); } double y_diff (double t) { return frisbee_y_at(t) - dog_max_y_at(t); } double frisbee_x_at (double t) { t = max(tf, t); t = min(t, frisbee_t_ground()); return (t - tf) * vf; } double dog_x_at (double t) { t = max(t, td); return (t - td) * vd; } double x_diff (double t) { return frisbee_x_at(t) - dog_x_at(t); } #define EPSILON 0.000001 double binsearch (double l, double r, double (*func)(double)) { while (r - l > EPSILON) { double s = (l + r) / 2; if (func(s) > 0.) { l = s; } else { r = s; } } return l; } int main () { cout.precision(15); ios::sync_with_stdio(false); cin >> tf >> vf >> hf >> td >> vd >> hd; calc_dog(); double tx = binsearch(td, max_t(), x_diff); double ty = binsearch(td, max_t(), y_diff); double t = max(tx, ty); double ret_t = frisbee_x_at(t) / vd; cout << t + ret_t << "\n"; }