题解:P16197 [ROIR 2014 Day 2] Lights 红绿灯

· · 题解

题解:P16197 [ROIR 2014 Day 2] Lights 红绿灯

为了描述方便,我们设帕霍姆(p)通过的第一个绿灯的亮起时刻为 0 时刻(而不是他通过第一个红绿灯的时间)。

题目询问在两红绿灯之间的最大平均速度,且该速度必须小于等于 1000 米每分钟。

p 可能在 [1,a] 的时候通过,那么他通过第二个红绿灯的时间就是在任意 [k(a+b),k(a+b)+a] 之间。

知道了这个,我们就可以很轻松得写出代码了:

AC Code

#include<bits/stdc++.h>
#define int double
using namespace std;

signed main(){
    int a,b,x;  cin>>a>>b>>x;
    int v1=1.0*x/a,v2;
    if(v1<=1000){
        cout<<1000<<endl;
        return 0;
    }
    for(int i=1;v1>1000;i++){
        v2=x/(i*(a+b)-a);
        v1=x/(i*(a+b)+a);
    }
    printf("%.10lf",min(1000.0,v2));
    return 0;
}

题解来之不易,点个赞再走吧……