貌似这问题比较火,陆陆续续看到不下于三次了,而且变种也比较多。。。直到昨天刷咱学校的UOJ,才反应过来真正的解题思路。可能火星了,但还是自己记录下吧:)
先转一下UOJ(UESTC ONLINE JUDGE)原题:偏僻的小路
Description
在电子科大清水河校区的某个偏僻角落里,有一条东西方向的小路,长L米(由西向东位置为0到L),小路上有N个人从t=0秒开始以相同的恒定速率V米/秒前进(面朝西或面朝东)。这条小路太偏僻了,所有人都想尽快离开这条小路。不幸的是,当两个人相遇时,只有男生会给女生让路(视为两人擦肩而过),男生遇上男生、女生遇上女生时,谁也不肯让路,只好都无奈的掉头往回走。
现在HS很好奇,想知道最后一个人离开小路的时间,以及所有人在小路上走的路程的总和,你能编写程序帮助他吗?
Input
第一行包括3个整数,N,L,V,表示小路上的人数、小路的长度、所有人前进的速率 (N<=100,L<=1000000,V>0)
接下来有N行,每行3个数据
第i行的数据表示第i个人的位置(从0到L的整数)、性别(M或F)、方向(W表示面朝西、E表示面朝东)
当N=L=V=0时,输入结束
Output
对于每组输入,输出一行两个小数,表示最后一个人离开的时间以及所有人在小路上走的路程的总和,用一个空格隔开,答案四舍五入保留两位小数
Sample Input
2 4 2
1 M E
3 M W
0 0 0
Sample Output
1.50 6.00
思路:考虑2个人A,B在C处相遇,设小路端点为1,2。直走不用多想,总路程自然是不变,为A->2+B->1。掉头的话,实际上是双方互相把各自的后半段路程交换,总路程依然不变:A->C->1+B->C->2 = A->2+B->1。推广到多人的情况下,相当于能量的传递,又由于

这篇博客介绍了蚂蚁过杆问题及其变种,包括电子科技大学清水河校区小路问题的解决方案。通过分析,得出在多人相遇时路程不变的结论,并提供了一段C++代码实现。文章还提及了其他类似问题,如蚂蚁在杆子上的最短和最长时间,以及平均时间的计算。
最低0.47元/天 解锁文章
1253

被折叠的 条评论
为什么被折叠?



