可怜的蚂蚁
Posted huashanqingzhu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可怜的蚂蚁相关的知识,希望对你有一定的参考价值。
试题描述
有一群蚂蚁在一根水平放置的长为L cm的木棍上行走,并且每只蚂蚁的速度都固定为1 cm/s。当一只蚂蚁走到木棍的两端时就不幸地掉落了,当两只蚂蚁相碰时,它们就分别反向行走,并假设忽略相碰的时间。现在我们已知木棍的长度L,蚂蚁的只数N和每只蚂蚁在木棍上的初始位置Ai(以木棍一段为坐标原点0,另一端为木棍长度L),但是蚂蚁可以随机的选择它们的初始行走方向。你的任务是求出在所给定条件下,对蚂蚁行走方向任意的所有情况下,求出所有蚂蚁都从木棍上掉落的最早时间和最晚时间。
输入
第一行两个正整数是L(木棍长度)和N(蚂蚁只数),接着一行是N个正整数Ai(1<=i<=N,0<=Ai<=L)。(1<=L<=1000,1<=N<=1000)
输出
输出最早时间和最晚时间。
输入示例
样例输入1(此行不用输入)
10 3
2 6 7
样例输入2(此行不用输入)
214 7
11 12 7 13 176 23 191
输出示例
样例输出1(此行不用输出)
4 8
样例输出2(此行不用输出)
38 207
分析:
可以“认为”两只蚂蚁碰头之后什么也没发生,也可以认为两只蚂蚁碰面后“穿过”对方继续前进。
只要理解这句话,问题的解决就很简单了。
最小值:所有蚂蚁都很聪明地选择距离木棍端点比较近的那一头行进,把这个情况下所有蚂蚁所需的时间累加即可。
最大值:所有蚂蚁都很愚蠢地选择距离木棍端点比较远的那一头行进,把这个情况下所有蚂蚁所需的时间累加即可。
1 #include 2 int main() 3 { 4 int i,l,n,min,max,temp; 5 int p[2000]; 6 scanf("%d%d",&l,&n); 7 for(i=0;i { 8 scanf("%d",&p[i]); 9 } 10 for(i=0;i { 11 p[n+i]=l-p[i]; 12 if(p[i]>p[n+i]) 13 { 14 temp=p[i]; 15 p[i]=p[n+i]; 16 p[n+i]=temp; 17 } 18 } 19 min=max=p[0]; 20 for(i=0;i<2*n;i++) 21 { 22 if(min min=p[i]; 23 if(max max=p[i]; 24 } 25 printf("%d %d\n",min,max); 26 }
参考:
http://blog.chinaunix.net/uid-26945573-id-3197506.html
https://blog.csdn.net/u012881011/article/details/46787577
以上是关于可怜的蚂蚁的主要内容,如果未能解决你的问题,请参考以下文章