洛谷CF29B题解
CF29B 交通信号灯
传送门
题目很好理解,这里就不多说了,思路都在代码里
#include<bits/stdc++.h>
using namespace std;
double l,d,v,g,r;
int main()
{
cout<<fixed<<setprecision(8);//重置输出方式(保留8位小数)
cin>>l>>d>>v>>g>>r;
if(l<=d)cout<<l/v; //直接特判红绿灯比终点还远的情况
else
{
double ti=d/v; //到红绿灯的时间
while(ti>=g+r)ti-=g+r; //压缩为一个红绿灯时间段
if(ti<g)cout<<l/v; //绿灯,不用等
else cout<<l/v+g+r-ti; //红灯 ,加上等的时间
}
return 0;
}
要注意的只是在去红绿灯的路上可能已经红绿反复好几次,时间要压缩

浙公网安备 33010602011771号