当前位置:   article > 正文

数学+物理——Follow Traffic Rules

数学+物理——Follow Traffic Rules

Follow Traffic Rules

题面翻译

两个城市之间有一条直达路,路上只放了一个限速牌。限速牌只限制它所在那一点的速度,驶过限速牌可以以任意速度行驶。

市民们的汽车加(减)速度恒为 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 1a,b104
第二行为三个整数 l l l d d d w w w。( 2 ⩽ l ⩽ 10 4 2\leqslant l\leqslant {10}^4 2l104 1 ⩽ d < l 1\leqslant d<l 1d<l 1 ⩽ w ⩽ 10 4 1\leqslant w\leqslant {10}^4 1w104

输出
共一行一个数,即答案,至少精确到小数点后 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

1 1
2 1 3
  • 1
  • 2

样例输出 #1

2.500000000000
  • 1

样例 #2

样例输入 #2

5 70
200 170 40
  • 1
  • 2

样例输出 #2

8.965874696353
  • 1

思路

这道题我们可以直接按照我们平常做物理题的方式去做。
在这里插入图片描述

代码

//这道题分类讨论太多了

#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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/587304
推荐阅读
  

闽ICP备14008679号