问题描述:

n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向 爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。

首先是最短时间,论证如下:

对于处于位置xi 处的蚂蚁,它最快掉下去的时间应该是min(xi, L - xi),显然,不管有没碰撞,这一点总是成立的。现在考虑所有的蚂蚁都朝着最近的一端走,此时是不可能有碰撞的:[0, L / 2) 处的蚂蚁总是向0爬,[L / 2, L)处的蚂蚁总是向L 端爬,则前后两部分蚂蚁相对而爬,不会碰撞,而同方向的蚂蚁更不会碰撞,所以得以证明当所有的蚂蚁都朝着最近的一端走的时候,不会有碰撞发生,此时得到的时间就是最短时间。

关于最长时间,考虑碰撞的影响, 现在假设有处于x1, x2(x1 < x2)处的两只蚂蚁A, B,A向右,B向左,于是它们会在(x1 + x2) / 2处相撞。则按照题目中所述相撞返回导致t(A) = (x2 - x1) + x1 = x2,t(B) = x2 - x1 + L - x2 = L - x1,而我们可以想象另一种做法,相撞之后直接往前走,则t'(A) = L - x1, t'(B) = x2。由此可以论证,碰撞对于最长时间的计算并无影响!所以只需所有蚂蚁朝最远的一端走的情形,即可知道最长时间。