您的位置:首页 > 其它

CF_5D_FollowTrafficRules

2016-03-30 20:32 274 查看
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 numbersl, d and w (2 ≤ l ≤ 10000; 1 ≤ d < l; 1 ≤ w ≤ 10000).

Output

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

Examples

input
1 1
2 1 3


output
2.500000000000


input
5 70
200 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: