【发布时间】:2015-05-13 17:16:04
【问题描述】:
面试时问了一个问题:
在一级方程式挑战赛中,有 n 支队伍,编号从 1 到 n。每个团队都有一辆汽车和一名司机。汽车规格如下:
- 最高时速:(150 + 10 * i) 公里/小时
- 加速度:(2 * i) 米每秒平方。
- 处理系数 (hf) = 0.8
- Nitro:将速度提高到两倍或最高速度,以较低者为准。只能使用一次。
这里 i 是团队编号。 赛车排队参加比赛。第 (i + 1) 辆汽车的起点线在第 i 辆汽车后面 200 * i 米处。
他们都同时开始,并试图达到他们的最高速度。每 2 秒重新评估一次位置(因此,即使汽车在其间越过终点线,您也会在 2 秒后知道)。在这个评估过程中,每个司机检查他的车10米范围内是否有车,他的速度降低到:hf *(当时的速度)。此外,如果车手注意到他是比赛中的最后一名,他会使用“nitro”。
以队伍数量和赛道长度为输入,计算最终速度和对应的完成时间。
我不明白如何处理这类问题。对于每个实例,我应该检查每对驱动程序的所有C(n,2) 组合并计算结果吗?但是我怎么知道我应该在什么情况下进行计算呢?
【问题讨论】:
-
我不确定,但如果我有你的问题,我认为你必须在“客户端-服务器”模型中实现。你有一个负责保存比赛的服务器。客户端是汽车(团队)。在每一步,客户都会告诉服务器他们的信息,服务器存储它。他们可以访问所有其他汽车信息。所以在每一步他们都会收到完整的汽车列表和他们的信息。所以他们可以找到如果 10 米内有汽车,时间为 O(n)。就像真正的一级方程式赛车一样,显示所有车手的排名和他们在屏幕上的位置!
标签: algorithm design-patterns data-structures