代码:
#include <stdio.h>
#include <math.h>
int main()
{
#ifdef _LOCAL
freopen("F://input.txt", "r", stdin);
#endif
double a, v, l, d, w;
scanf("%lf%lf%lf%lf%lf", &a, &v, &l, &d, &w);
if(v <= w || w * w / (2 * a) >= d)
{
double t = v / a;
double len = a * t * t / 2;
if(len > l)
printf("%lf", sqrt(2 * l / a));
else if(len == l)
printf("%lf", t);
else
printf("%lf", t + (l - len) / v);
}
else
{
double total = 0;
double t = w / a;
double len = a * t * t / 2;
total += t;
double len1 = d - len;//在达到限速后可以先加速后减速(或者加速 匀速, 减速), 恰好在达到限速点时以w通过
double t1 = (v - w) / a;
if((w + v) * t1 <= len1)
total += 2 * t1 + (len1 - (w + v) * t1) / v;
else
total += 2 *(sqrt( w * w + a * len1)- w) / a;
double t2 = (v - w) / a;
double len2 = w * t2 + a * t2 * t2 / 2;
double len3 = l - d;
if(len2 > len3)
total += (sqrt(w * w + 2 * a * len3) - w) / a;
else
total += t2 + (len3 - len2) / v;
printf("%.10lf", total);
}
return 0;
}