问题描述
在一个长为N的光滑平板上,有若干个光滑小球分布在平板的整数点上,比如0,1,2,....N,然后给定初始向左移动的小球工个,初始向右移动的小球R个,接下来给定向左移动的每个小球的初始位置和向右移动的每个小球的初始位置。保证小球的速度始终为每秒一个单位长度,当两个方向不同的小球相撞时,它们同时改变运动方向并继续运动(相撞瞬间完成,不消耗时间)。请求解最后一个小球从平板掉下来的时间。初始时刻t=0,即求解最后一个小球掉下去的t的值。(如果端点处小球一开始就向木板外滚动,那么它的掉落时刻为t=0 )
很多人刚开始看题的时候,就会感到十分困惑,因为所给的小球由于方向不同,有的之间会形成碰撞改变方向,那么又得重新改变方向进行运动,如何能够每秒都能进行位置的重新更新呢?我一开始也是这么想的。但是后来发现是我想多了。我们其实可以发现,小球其实运动的方向和时间仅仅和开始的方向和位置有关。这是为什么呢?
简单的举一个例子,如果有两个小球A、B 分别在0 2 位置,当二者碰撞时应该是在1位置,当碰撞发生之后,二者要改变方向继续运动。但是我们可以把它们的模型分别抽离出来,认为它们没有发生碰撞,而是继续朝着开始的方向进行运动。而事实上这两者确实是等价的关系。这样我们的问题就得到了简化:从必须找到时时刻刻更新每个小球位置,到最后一个小球掉落