N只蚂蚁放在一个长管(长度L)里移动,每只蚂蚁初始位置随机(与管子左端距离分别为x(1),…x(N)),他们的头朝向左或右,移动速度相同均为 V,蚂蚁长度忽略不计,任意两只相遇后掉头反方向移动,蚂蚁移到管子的左右出口就掉出去。问所有蚂蚁都掉出去需要多久?写出推理过程。


在网易游戏的笔试上遇到的题,当时没做出来,后来回来后也没怎么仔细想。今天去HYT二面,勒个相当和蔼的面试官一挑三,中间又问到这个题,那一刻我的脑海一片空白——我果然是悲剧的化身。

咬咬牙,告诉自己以后一定要把笔面中遇到的知识点一一弄懂。

这个题,想通了其实很简单,关键就是要想明白一点:假设给每只蚂蚁编个号,两只蚂蚁相遇后各自掉头其实可以看作两只蚂蚁都没有掉头,只是把身上编号换了下而已,这样的话其实就可以将整个问题看作所有蚂蚁都按自己方向走,都不曾掉头。这样最好的情况是所有蚂蚁都在某一端,直接从这端就掉出去了,时间接近0;最坏的情况是有只蚂蚁在管子这端但往另外一端走,这样时间为L/V。所有蚂蚁都掉出去的时间就是所有蚂蚁中离它所朝方向那端最远的那只蚂蚁走到那端的时间,即这个距离除以速度即可。