赞
踩
两个城市之间有一条直达路,路上只放了一个限速牌。限速牌只限制它所在那一点的速度,驶过限速牌可以以任意速度行驶。
市民们的汽车加(减)速度恒为 a k m / h 2 a \ \mathrm{km/h^2} a km/h2,且最大速度为 v k m / h v \ \mathrm{km/h} v km/h。路总长为 l k m l \ \mathrm{km} l km。限速牌限速为 w k m / h w \ \mathrm{km/h} w km/h,被放在距离起点城市 d k m d \ \mathrm{km} d km 的位置上。汽车在起点速度为 0 0 0。要求找到市民们在最优情况下,通过该路的最短时间。
汽车可以以任意速度进入终点城市。
输入
第一行为两个整数
a
a
a 和
v
v
v。(
1
⩽
a
,
b
⩽
10
4
1\leqslant a,b\leqslant {10}^4
1⩽a,b⩽104)
第二行为三个整数
l
l
l,
d
d
d 和
w
w
w。(
2
⩽
l
⩽
10
4
2\leqslant l\leqslant {10}^4
2⩽l⩽104,
1
⩽
d
<
l
1\leqslant d<l
1⩽d<l,
1
⩽
w
⩽
10
4
1\leqslant w\leqslant {10}^4
1⩽w⩽104)
输出
共一行一个数,即答案,至少精确到小数点后
5
5
5 位。
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/h $ ^{2} $ , and has maximum speed of $ v $ 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.
The first line of the input file contains two integer numbers $ a $ and $ v $ ( $ 1<=a,v<=10000 $ ). The second line contains three integer numbers $ l $ , $ d $ and $ w $ ( $ 2<=l<=10000 $ ; $ 1<=d<l $ ; $ 1<=w<=10000 $ ).
Print the answer with at least five digits after the decimal point.
1 1
2 1 3
2.500000000000
5 70
200 170 40
8.965874696353
这道题我们可以直接按照我们平常做物理题的方式去做。
//这道题分类讨论太多了 #include<iostream> #include<cmath> using namespace std; double a,v,l,d,w,t,v1,s,t1,v2; int main(){ cin>>a>>v>>l>>d>>w>>t; t=sqrt(2*d/a); //此时一直加速,因为没有限制 //主要分成两类,v>w和v<=w,两段:限速那 if(a*t<=w){ v1=a*t; if(v1>=v){ v1=v; t=v/a; s=d-(t*t)/2*a; t+=s/v; } }else{ v1=sqrt(a*d+w*w/2);//这个公式是算最大的速度 if(v1>v){ v1=v; t=v/a; s=d-a*t*t/2; if(v>w){ t1=(v-w)/a; s-=(v*v-w*w)/2/a; t+=t1+s/v; v1=w; }else{ t+=s/v; } }else{ t=(2*v1-w)/a; v1=w; } } v2=sqrt(v1*v1+2*a*(l-d)); if(v2>=v){ s=l-d-(v*v-v1*v1)/2/a; t1=(v-v1)/a; t+=t1+s/v; }else{ t+=(v2-v1)/a; } printf("%.10lf",t); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。