#ifndef LOCAL #pragma GCC optimize("O3") #endif #include using namespace std; #define sim template muu & operator<<( #define ris return *this #define eni(r) sim> typename enable_if <1 r sizeof(dud(0)),muu&>::type operator<<(c g) { sim> struct rge {c b,e ;}; sim> rge range(c i, c j) {return rge{i, j};} sim> auto dud(c *r)-> decltype(cerr << *r); sim> char dud(...); struct muu { #ifdef LOCAL stringstream a; ~muu() {cerr << a.str() << endl;} eni(<) a << boolalpha << g; ris;} eni(==) ris << range(begin(g), end(g));} sim, class m mor pair r) {ris << "(" << r.first << ", " << r.second << ")";} sim mor rge u) { a << "["; for (c i = u.b; i != u.e; ++i) *this << ", " + 2 * (i == u.b) << *i; ris << "]"; } #else sim mor const c&) {ris;} #endif muu & operator()(){ris;} }; #define debug (muu() << __FUNCTION__ << "#" << __LINE__ << ": ") #define imie(r) "[" #r ": " << (r) << "] " #define imask(r) "[" #r ": " << bitset<8 * sizeof(r)>(r) << "] " #define arr(a, i) "[" #a imie(i) ": " << a[i] << "] " #define arr2(a, i, j) "[" #a imie(i) imie(j) ": " << a[i][j] << "] " using ld = long double; ld eps = 1e-10; ld tf, vf, hf, td, vd, hd; ld res; ld tz; void naZiemi() { ld top = sqrt(2. * hf); ld tbg = td + vf * top / vd; res = max(top, tbg) + vf * top / vd; debug << "na ziemi " << res; } bool check(ld y) { ld t = sqrt(2. * (hf - y)); if (t < tz) return false; ld v0 = sqrt(6.0 * hd); ld tp = (v0 - sqrt(v0 * v0 - 6. * y)) / 3.; return td + tp <= t; } ld czas(ld y) { ld t = sqrt(2. * (hf - y)); ld x = vf * t; return t + x / vd; } int main() { cin >> tf >> vf >> hf >> td >> vd >> hd; td -= tf; naZiemi(); if (vd > vf + 1e-5) { tz = vd * td / (vd - vf); ld p = 0; ld k = hd - eps; for (int it = 0; it < 60 && p < k; ++it) { ld s = (p + k) / 2.; if (check(s)) { res = min(res, czas(s)); p = s; } else k = s; } } cout.precision(10); cout << fixed; cout << res + tf << endl; return 0; }