假设在一个圆管中有 n 个球。管子长 100 米,最初,管子中的每个球都距离我们称为起点的点 i 米。现在球开始在管内以不同方向以圆形顺序行进。球在管内以每秒 0.1 米的速度行进。当两个球在一个点相遇时,就会发生碰撞,球会改变它们的行进方向。如果这个过程持续很长时间,比如说 10^9 + 6 秒;我们必须找出球发生碰撞的次数。球到起点的初始距离作为输入给出。
因此,如果输入类似于 input_array = [0, 10],那么输出将是 400000
有两个球,它们与起跑线的初始距离作为输入提供给我们。如果他们的方向相同,他们将永远不会发生碰撞。但是,如果它们的方向不同,它们有时会发生碰撞。一个球将与另一个球碰撞 400000 次。
让我们看看以下实现以获得更好的理解 -
def solve(input_array): input_array.sort() size = len(input_array) lap_count = (10**5)*2 output = 2*lap_count*(size//2)*(size - size//2) stop = 0 for i in range(size - 1): if stop != 1: if input_array[i] + 1 == input_array[i+1]: output+=2 stop = 1 else: stop = 0 else: stop = 0 return output print(solve([0, 10]))
[0, 10]输出结果
400000