码迷,mamicode.com
首页 > 其他好文 > 详细

可怜的蚂蚁

时间:2018-05-12 19:21:41      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:距离   col   分析   i++   isp   main   sof   分享图片   mic   

试题描述
有一群蚂蚁在一根水平放置的长为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 }
View Code

 

参考:

http://blog.chinaunix.net/uid-26945573-id-3197506.html

https://blog.csdn.net/u012881011/article/details/46787577

 

可怜的蚂蚁

标签:距离   col   分析   i++   isp   main   sof   分享图片   mic   

原文地址:https://www.cnblogs.com/huashanqingzhu/p/9029474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!