有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个
位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头
时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
通过遍历查找,有32种可能的方向组合,但有16种"并列"为最慢.
==============================================
最快的摆放:
1.把木杆根据中点分为左半部分和右半部分。
2.作为一只蚂蚁,要想最快地离开木杆,首先是判断自己属于木杆的哪部分。如果是左,则向左走;如果是右,就向右走。这样就可最快地离开木杆。
最慢的摆放:
1.除非在中点,每只蚂蚁离开木杆都有一个近端距离, 远端距离
2.只要保证5只蚂蚁中 远端距离最长的蚂蚁面向远端, 其他的蚂蚁随便摆放即可。
所以在"32种可能的方向组合,有16种并列为最慢".
以题目为例
"有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁"
3cm 的(近端3,远端24)
7 (7,20)
11 (11,16)
17 (10,17)
23 (4,23)
所以只要保证3 厘米的蚂蚁面向24的一端 其他的蚂蚁随便摆。
把碰撞简化成AB相遇延a,b原方向继续前进,即可求出最大时间 就是最大的远端距离/速度。
此解法可以用于任意位置 任意速度,但必须保证每个蚂蚁速度相同。
==============================================
没有反例的啦, 哪怕有10000只蚂蚁在上面, 只要保证最远端的蚂蚁面向远端, 最长的时间就是最远端/速度。
这道题最大的迷惑项 是相撞, 如果转换成只是相遇,擦肩而过就好理解了,并且这种转化不影响结果。
假 设A B相向而行,A距远端的距离为a, B为b, A B各自走了距离c以后相遇,碰撞,反向, A要走(b-c)距离,
B要走(a-c), 总共A走了b, B走了a距离。所以max(a,b)就是最远距离,相撞还是擦肩而过只是影响到是A走了a还是走了b,
对整体答案没有影响。
应该可以有更缜密的数学推理,数学很差,就不献丑了。
这道题最大的迷惑项 是相撞, 如果转换成只是相遇,擦肩而过就好理解了。
这个题目有意思,看上去复杂,其实简单。如果蚂蚁转身不需要时间,而且所有的蚂蚁都长得一样,而且我眼神也不好的话,那么两只蚂蚁是碰撞还是擦肩而过,看上去都一样,反正我看到的先是两个黑点靠近,然后这两个黑点碰到一起,然后又分开。
“灵
魂算法”即是指当两只蚂蚁碰面后,理论上它们应该立即掉头反向而行,但此时我们可以认为它们是可以穿过对方的“灵魂”,碰面之后仍会坚持原来的方向行
走。(要知道,对我们来说题目中两只蚂蚁并没有什么不同之处,这是算法思想的关键,理解了这里我想接下来计算最大时间就不成问题了)。既然蚂蚁可以穿越对
方而行走,那么用时最长的就是行走路线最长的那只蚂蚁喽,回头看看情景中给出条件,即可得出结果:
第一只:27-3=24/1=24(s)
第二只:27-7=20/1=20(s)
第三只:27-11=16/1=16(s)
第四只:17-0=10/1=17(s)
第五只:23-0=23/1=23(s)
最长时间为24s
http://forum.byr.edu.cn/pc/pccon.php?id=1041&nid=72092