CF_5D_FollowTrafficRules

来源:互联网 发布:转炉煤气 优化控制 编辑:程序博客网 时间:2024/06/18 08:31

D. Follow Traffic Rules
time limit per test
1 second
memory limit per test
64 megabytes
input
standard input
output
standard output

Everybody knows that the capital of Berland is connected to Bercouver (the Olympic capital) by a direct road. To improve the road's traffic capacity, there was placed just one traffic sign, limiting the maximum speed. Traffic signs in Berland are a bit peculiar, because they limit the speed only at that point on the road where they are placed. Right after passing the sign it is allowed to drive at any speed.

It is known that the car of an average Berland citizen has the acceleration (deceleration) speed of a km/h2, and has maximum speed ofv km/h. The road has the length of l km, and the speed sign, limiting the speed to w km/h, is placed d km (1 ≤ d < l) away from the capital of Berland. The car has a zero speed at the beginning of the journey. Find the minimum time that an average Berland citizen will need to get from the capital to Bercouver, if he drives at the optimal speed.

The car can enter Bercouver at any speed.

Input

The first line of the input file contains two integer numbers a and v (1 ≤ a, v ≤ 10000). The second line contains three integer numbersld and w (2 ≤ l ≤ 100001 ≤ d < l1 ≤ w ≤ 10000).

Output

Print the answer with at least five digits after the decimal point.

Examples
input
1 12 1 3
output
2.500000000000
input
5 70200 170 40
output
8.965874696353


题意给你一个车的最大速度v加速度a(加速或者刹车都是这个加速度)

给你一个路程l其中d处有一个测速点速度不能超过w

问从速度为0开始最快要多久能通过终点


这里特别注意那是一个测速点

之后速度可以比w大


其他的就是分不同情况讨论就可以了,具体讨论见代码

运动学物理题……


#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>using namespace std;int main(){    int aa,vv;    int ll,dd,ww;    scanf("%d%d%d%d%d",&aa,&vv,&ll,&dd,&ww);    double a=aa,v=vv,l=ll,d=dd,w=ww;    double t1=v/a;    double x1=0.5*a*t1*t1; //加到最大速度的距离    double t2=w/a;    double x2=0.5*a*t2*t2; //加到限制速度的距离    double t3=(v-w)/a;    double x3=w*t3+0.5*a*t3*t3; //从w加速到最大速度的距离    if(v<=w)    {        if(x1>=l)            printf("%lf\n",sqrt(l*2.0/a));        else            printf("%lf\n",t1+(l-x1)/v);    }    else    {        if(d<=x2)   //d最小一直加速到匀速即可        {            if(x1>=l)                printf("%lf\n",sqrt(l*2.0/a));            else                printf("%lf\n",t1+(l-x1)/v);        }        else if(d<=x1+x3)  //先加速后减速到w        {            double vm1=sqrt(a*(d-x2)+w*w);            if(l-d<=x3)            {                double vm2=sqrt(2*a*(l-d)+w*w);                printf("%lf\n",t2+(vm1-w)*2/a+(vm2-w)/a);            }            else                printf("%lf\n",t2+(vm1-w)*2/a+t3+(l-d-x3)/v);        }        else        //加速匀速减速到w        {            if(l-d<=x3)            {                double vm2=sqrt(2*a*(l-d)+w*w);                printf("%lf\n",t1+t3+(d-x1-x3)/v+(vm2-w)/a);            }            else                printf("%lf\n",t1+t3+(d-x1-x3)/v+t3+(l-d-x3)/v);        }    }    return 0;}


0 0
原创粉丝点击