#include #include #include #include #include #include #include #include #include #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define REP(i,n) FOR(i,0,n) #define TRACE(x) cerr << #x << " = " << x << endl #define _ << " _ " << #define pb push_back #define X first #define Y second using namespace std; typedef long long ll; typedef pair pii; const double eps = 1e-9; inline bool lt(double a, double b) { return a + eps < b; } inline bool gt(double a, double b) { return lt(b, a); } inline bool eq(double a, double b) {return !lt(a, b) && !gt(a, b); } inline bool lte(double a, double b) { return !gt(a, b);} inline double sqr(double x) { return x*x;} double T_f, V_f, H_f, T_d, V_d, H_d; double t_term,v_up, t_up; double res = 0; double d_dog(double t) { return V_d * (t - T_d); } double d_friz(double t) { if (lte(t, t_term)) return V_f * t; else return V_f * t_term; } double h_dog(double t) { if (lte(t, T_d)) return 0.; else if (lte(t - T_d, t_up)) return v_up * (t - T_d) - 3. * sqr(t - T_d) / 2; //maybe just first arg else return H_d; } double h_friz(double t) { return max(H_f - sqr(t) / 2., 0.); } bool ok(double t) { return lte(h_friz(t), h_dog(t)) && lte(d_friz(t), d_dog(t)); } void solve() { double lo = 0, hi = 1e18; REP(i, 5000) { double t = (lo + hi) / 2; if (ok(t)) hi = t; else lo = t; } // TRACE(lo _ h_friz(lo) _ h_dog(lo) _ d_dog(lo) _ d_friz(lo)); res += lo; double t = lo; res += d_friz(t) / V_d; cout << fixed << setprecision(9) << res << endl; } void load() { cin>>T_f>>V_f>>H_f>>T_d>>V_d>>H_d; res += T_f; T_d -= T_f; T_f = 0; t_term = sqrt(2. * H_f); v_up = sqrt(6. * H_d); t_up = v_up / 3.; } int main(){ ios_base::sync_with_stdio(false); load(); solve(); return 0; } /* lo _ h_friz(lo) _ h_dog(lo) _ d_dog(lo) _ d_friz(lo) = 15.4919 _ 40 _ 40 _ 38.9516 _ 30.9839 22.983866770 */