一辆汽车以每秒v米的速度从A点移动到B点。动作发生在X轴上.离A d米处有交通灯。从时间0开始,对于第一个g秒,绿灯是开着的,接下来的r秒是红灯,然后绿灯是亮着的,以此类推。
汽车可以立即加速从0到v,反之亦然,可以立即减速从v到0。考虑一下,它会立即通过绿灯处的红绿灯。当红灯刚亮的时候,如果汽车接近红绿灯,它就没有时间过去了。但是如果它在绿灯刚亮的时候接近红绿灯,它就可以移动了。这辆车在0点离开A点。
在不违反交通规则的情况下,汽车从A点到B点的最短时间是多少?
输入整数l,d,v,g,r (1 ≤ l, d, v, g, r ≤ 1000, d < l) --A到B之间的距离(以米为单位),A到交通灯的距离,汽车的速度,绿灯的持续时间和红灯的持续时间。
溶液
if(g*v>d)
ans = l/v // i got it
else
ceil(d/v/g+r)*(g+r)+(l-d)/v // i am not getting Please help例子->假设l=5,d=4,v=1,g=2,r=1
在t=0,汽车从$A $开始
在t=2,灯变红了,但是汽车离灯光很远,所以没有问题继续前进
在t=3,绿灯再次变绿,每秒钟2美元(直到$t=5$)
在t=4,灯光依然是绿色的,我们到达了光明的地方。
注意->我们已经过了红绿灯别担心
在t=5,我们到达B点
但是正确的ans =7,这不是我做错的最小值吗?
上面的方法是由一个红色的编码器和我包括他的解决方案链接下面也。
请帮助我感到难过,我正试图从三天内找到正确的逻辑。
你们是我最后的希望。
问题链接问题b
注->上面接受的解决方案,提供7作为输出,但我认为应该是5,所以这不会是错误的,因为代码强制接受它。
发布于 2019-04-24 19:57:37
是的,你是对的,答案应该是5。
条件g * v > d没有任何意义。它只是检查你是否可以通过交通灯在第一个绿色阶段。实际上应该是((d + v - 1) / v) % (g + r) < g。首先,我们用(d + v - 1) / v (整数除法)来计算红绿灯,如果我们使用浮点数,它和ceil(d / v)是一样的。然后用模数计算绿红循环中我们通过红绿灯的位置。如果结果是< g,则当它是绿色时,我们传递给它,解决方案是(double)l / v。
您可以使用与上述模块相同的技术,以获得我们必须在红绿灯处停车的秒数,然后将从开始到交通灯的时间(整秒)和从交通灯到目的地的时间相加。或者,我们可以计算我们需要的秒数,直到绿色红色循环结束时,通过交通灯。这就是您所做的,但是您缺少了大括号,因此对于浮点数,我们可以使用您的公式和额外的大括号:
ceil(d / v / (g + r)) * (g + r) + (l - d) / v。
https://stackoverflow.com/questions/55829543
复制相似问题