蚂蚁过杆问题整理

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

貌似这问题比较火,陆陆续续看到不下于三次了,而且变种也比较多。。。直到昨天刷咱学校的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。推广到多人的情况下,相当于能量的传递,又由于

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值