思维转换---灵魂交换

来源:互联网 发布:极致下料软件 编辑:程序博客网 时间:2024/04/27 20:16

题目:.有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。求所有蚂蚁都离开木杆的最小时间和最大时间。

 

析:设木杆左端计长度0点,右端计长度27cm,则当前三只蚂蚁当头朝左端,后两只蚂蚁头朝右端时,用时最短,时间为中间那只蚂蚁离开木杆的时间为11s。

 

设木杆总长L;可以假设只有一只蚂蚁,则最长需时为max(x1, L-x1)

若有两只蚂蚁,分别在x1,x2处(x1<x2),则最长需时max(L-x1,x2),相当于用时(x2-x1)/2后,一只蚂蚁在(x2+x1)/2处。也相当于一只蚂蚁在x1或x2的远端朝向处

若有三只蚂蚁x1,x2,x3,则可计算最长需时max(l-x1, x3);

同理可推,五只蚂蚁的最长时间为max(L-x1, x5).

即最长时间为24s

 

灵魂交换解法(要跳出常规思维)
方法是这样的:可以假设蚂蚁之间有灵魂交换这一特异功能,每次两蚂蚁碰头后,方向改变同时两蚂蚁灵魂互相交换,这样的话,其实相当于这个木杆可以 同时过两只蚂蚁。举例来说:任意两蚂蚁A,B, A-> <-B,碰撞后,B-> <-A,灵魂交换,又变成A-> <-B,还是这两只蚂蚁,而且这种假设不会带来总路程上的任何变化。
从这样一个角度来看,问题就很简单了:
最长时间: 即所有蚂蚁中离杆其中一端最远的那只蚂蚁离杆所需时间。 
最短时间:即中间那种蚂蚁(奇数个蚂蚁)离杆其中最近的一端所需时间,偶数个则就看两只

按这种方法同样也得到了正确结果是最大24,最小是11,时间复杂度是o(n)

原创粉丝点击