re: 关于蚂蚁问题(Ants) zdh 2008-06-12 16:06
实际过程可以这么进行抽象模拟:
序列中的元素带有方向,进行负值部分移动到负值区域,正值部分移动到正值区域时就不再发生碰撞,此时绝对值最小的值决定剩余爬行时间
re: 关于蚂蚁问题(Ants) zdh 2008-06-12 16:00
这个问题看到实质就很简单,所有的蚂蚁都是相同的蚂蚁,因此可以看成所有的蚂蚁都可以穿过对面爬过来的蚂蚁就ok啦,最长时间就是两端的蚂蚁向另一端爬出去,最短的就是两端的四个蚂蚁向所在端爬出:)
re: 我们-献给BlogJava 我们伟大的小京 2008-05-12 19:40
借用别人的几句。
蚯蚓
听到春天的气息
出来
....
没有涵义,不用乱猜了。。
re: 关于蚂蚁问题(Ants) blues 2008-05-12 15:53
二楼的数学式和证明我觉得有点晕,没细看。 原理应该也一样
至于为什么说27-3是最长,我中间跳跃一些而已。
就是观察分析了两端的蚂蚁后说的, A离左边3, E离右边4。
所以最长就是27-3=24。 上一句分析我省略了而已,SORRY。
最短:
我只是将五个蚂蚁的最短时间列出来而已, 最长时间列出来没意义了。
如果用式子总结便是: 最靠近杆中间点的那个蚂蚁的最短时间,即C距离左边。
@dreamingnest
re: 关于蚂蚁问题(Ants) dreamingnest 2008-05-12 15:26
你为什么确定27-3=24是便是最长的呢?我觉得你说的“即所有蚂蚁中离杆其中一端最远的那只蚂蚁,即为最长时间”和“所有蚂蚁使用时间:A最短是3, B最短是7, C最短11, D最短是10, E最短是4”中的两个“所有”和我解释的还不太一样,呵呵。
·最长时间:是按照你说的“蚂蚁不调头,即擦肩而过,继续沿原来方向前进(与调头是一样的,只是换了一只蚂蚁而已)”这样,但有两点说明:(1)通过分析,我们只需判断最两端的两只蚂蚁便足够了,证明见二楼“银河使者”的解释。(2)一定要求出4个数进行比较后才可以,假设最左端和最右端的位置为L和R,中长度为T,那么最长的时间为max(max(L,T-L),max(R,T-R))。
·最短时间:通过分析后,也只需看最中间的一个(共奇数蚂蚁)或两个(共偶数蚂蚁)蚂蚁到达某一端的最短时间,对于奇数:min(L,T-L),对于偶数:max(min(L,T-L),min(R,T-R))。
·通过程序来实现是有必要的,这算是一道模拟题目,可在情况类似的计算应用中会遇到,正如英文描述中可能出现1000000数量级别的,这样我们便无法直接得出结果。此题能作为面试题,而不是笔试题,就是在考察一种思想,避开“一根不能同时通过两只蚂蚁”的迷惑。
·感谢大家能仔细讨论这个问题,写程序相信每个人都能实现,只是这道题给我们的启发是非常大的~
re: 关于蚂蚁问题(Ants) blues 2008-05-12 14:22
其实楼主的思想比较好,本人觉得这种题目根本不需要用程序来计算,
我认为还有更好的方法,我在原文给出了最长时间的分析。
这里我加上最短时间分析:
其实文中蚂蚁相撞两蚂蚁调头
可以这样看问题,如果相撞后,杆可以过两只蚂蚁
蚂蚁不调头,即擦肩而过,继续沿原来方向前进(与调头是一样的,只是换了一只蚂蚁而已)
这样问题就简化了,呵呵。
即所有蚂蚁中离杆其中一端最远的那只蚂蚁,即为最长时间。
即27-3=24
同理,最短时间为
所有蚂蚁使用时间:A最短是3, B最短是7, C最短11, D最短是10, E最短是4。
所以总的最短时间为11.
不知道小弟的思路是否正确?~~~~
re: 关于蚂蚁问题(Ants) 银河使者 2008-05-10 14:14
楼主这个想法非常的好,打满分。
下面用数学归纳法证明一下这个算法。让我们先来看最简单的形式(m=1),有两只蚂蚁的情况,假设细木杆的长度为n,两只蚂蚁的位置分别为p1和p2。并且p2 > p1。其他的条件如原题。下面分别用p1和p2来代表两只蚂蚁。
对于两只蚂蚁,方向组合只有四种,分别如下:
1. p1、p2都向左 最长时间:time(p2)
2. p1、p2都向右 最长时间:time(p1)
3. p1向左、p2向右 最长时间:max(time(p1), time(n - p2))
4. p1向右、p2向左(这种情况会发生碰撞)
最长时间:max(time(n - p1), time(p2))
对于这种情况,实际上p2的时间为time(((p2 - p1) / 2 ) * 2 + n - p2 )= time(n - p1)
p1的时间为time(((p2 - p1) / 2 ) * 2 + p1) = time(p2),
从最终结果看,A- >, < -B 就相当于< -B , A - > 相当于A、B互相穿越而过,并且B只走到A最初的位置,而A也只走到B最初的位置。
从上面四种情况的最长时间可看出,正好将两种蚂蚁p1和p2可能存在的的四种可能:p1、p2、n - p1、n-p2 。我们要做的就是求这四个值的最大值,即max(time(p1)、time(p2)、time(n - p1)、time(n-p2))。 如果用文字来描述的话,就是任意一只蚂蚁到达两端的最长时间就是最终结果。
最简单的情况已经ok了,现在假设m只蚂蚁也成立,那么这m只蚂蚁也可以看成是一只蚂蚁,而m+1只蚂蚁当然就相当于两只蚂蚁了。所以
m = 1 成立
假设m成立
而证明了m+1也成立
所以“任意一只蚂蚁到达两端的最长时间就是最终结果”的结论成立
re: 关于蚂蚁问题(Ants) 漠漠 2008-05-10 13:29
确实是这样,我们可以想象成它们碰撞后并没有反向而是继续直着向前走:)