#include #define FOR(n, a, b) for(int n = (a); n < (b); ++n) #define ALL(x) x.begin(), x.end() #define pb push_back #define st first #define nd second using namespace std; typedef long long ll; typedef pair pint; typedef vector vi; typedef vector vvi; typedef vector vii; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.precision(20); double Tf, Vf, Hf, Td, Vd, Hd; cin >> Tf >> Vf >> Hf >> Td >> Vd >> Hd; double Twyskoku = sqrt(2.0/3.0*Hd); // czas wyskoku psa do Hd double Vwyskoku = 3 * Twyskoku; // pred pocz psa do gory double Tcalk = sqrt(2 * Hf); // calk czas spadania frysbie double TfHd = sqrt(2 * (Hf - Hd)); // czas spadania frysbie do Hd if (Vf >= Vd) // pies nigdy nie dogoni { double sf = Tcalk * Vf; // gdzie doleci frysbie double T = sf / Vd; cout << (2 * T + Td) << "\n"; return 0; } double sff = Vf * (Td - Tf); // przewaga frysbie double Tdogonienia = sff / (Vd - Vf); // cazs dogonienia double HfTd = Hf - 1 / 2.0 * (Td - Tf)*(Td - Tf); // wysokosc frysbie w Td if (Tdogonienia >= Tcalk) { double sf = Tcalk * Vf; // gdzie doleci frysbie double T = sf / Vd; cout << (2 * T + Td) << "\n"; return 0; } if (TfHd <= Twyskoku) { double Vspad = Td - Tf; double delta = (Vspad + Vwyskoku)*(Vspad + Vwyskoku) - 4*HfTd; double T = ( (Vspad + Vwyskoku) + sqrt(delta) ) / 2.0; double Tz= max(T, Tdogonienia); double s = Vf*(Tz); double Tp = s / Vd; cout << (Tz + Tp + Td) << "\n"; return 0; } double T = max(Tdogonienia, TfHd); double s= Vf*(T + Td - Tf); double Tp = s / Vd; cout << (Tz + Tp + Td) << "\n"; return 0; }