【发布时间】:2019-09-13 17:17:57
【问题描述】:
一辆汽车以每秒 v 米的速度从 A 点移动到 B 点。动作发生在 X 轴上。在距离 A d 米处有红绿灯。从时间 0 开始,前 g 秒绿灯亮,然后在接下来的 r 秒红灯亮,然后绿灯再次亮 g 秒,依此类推。
汽车可以立即从 0 加速到 v,反之亦然,可以立即从 v 减速到 0。考虑到它在绿灯处立即通过红绿灯。如果汽车在红灯刚亮的瞬间接近红绿灯,则来不及超车。但如果它在绿灯刚亮的那一刻接近红绿灯,它就可以移动。汽车在 0 点离开 A 点。
在不违反交通规则的情况下,汽车从 A 点到 B 点的最短时间是多少?
输入 整数 l, d, v, g, r (1 ≤ l, d, v, g, r ≤ 1000, d
解决方案
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 这不是我做错的最低要求?
红色编码员使用了上述方法,我也在下面提供了他的解决方案链接。
请帮助我感到难过,我试图从 3 天开始找到正确的逻辑。
你们是我最后的希望。
问题链接problem b
Accepted solution link of red coder
注意-> 上面接受的解决方案给出了 7 作为输出但我认为它应该是 5。所以这不会是错误的,因为 codeforces 接受了它。
【问题讨论】:
-
你想问一个问题还是想让别人帮你做这个练习?我建议你阅读this guide,然后编辑你的问题。
-
我相信您的评估是正确的,并且提供的代码确实会产生错误的结果。第一个条件
g * v > d只是不够笼统,不足以解释到达灯之前的多个灯开关。 -
@NicoSchertler codeforces 接受了那个红色编码器的结果
-
@m.raynal OP 正在寻求帮助以解决逻辑问题。 OP 已经导出了一个解决方案,该解决方案为测试示例提供了
5,但一个公认的算法为同一示例生成了7。 -
这只意味着代码通过了codeforces的测试。这并不意味着测试是正确或完整的。
标签: algorithm modular-arithmetic