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

蚂蚁感冒

时间:2019-02-05 19:41:25      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:有一个   计算   clu   ems   isp   span   sed   abs   algo   

问题描述

  长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。

  每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

  当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

  这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

  请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入格式
  第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。

  接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
输出格式
  要求输出1个整数,表示最后感冒蚂蚁的数目。
样例输入
3
5 -2 8
样例输出
1
样例输入
5
-10 8 -20 12 25
样例输出
3

Algorithm

看过一本书,[挑战程序设计竞赛(第2版)].巫泽俊.(提取码:w81q)

里面有一个问题是:

技术图片

 

灵感便源于此,我们这样考虑一下,两只蚂蚁从两端往中间爬,相撞之后分别掉头,这时把他看作是擦肩而过会发现,其实是一样的,因此我们就不用考虑掉头的问题。

想明白之后会发现代码异常的简单。


AC 

技术图片
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 
 5 using namespace std;
 6 
 7 const int MAX = 51;
 8 int n = 0;
 9 
10 int fun(int *a)
11 {
12     int c = 1;
13     int r, l; r = l = 0;
14     if(a[0] > 0){ // 往右 
15         for(int i=1;i<n;i++){
16             if(abs(a[i]) > abs(a[0]) && a[i] < 0)
17                 r++; // 右边感冒蚂蚁的数目 
18             if(abs(a[i]) < abs(a[0]) && a[i] > 0)
19                 l++;
20         }    
21         c = (r == 0)?1:c+l+r; // 往右没有被传染的蚂蚁,左边也不可能被传染 
22         return c; 
23     } 
24     else{    // 往左  a[0] < 0
25         for(int i=1;i<n;i++){
26             if(abs(a[i]) < abs(a[0]) && a[i] > 0)
27                 l++;
28             if(abs(a[i]) > abs(a[0]) && a[i] < 0)
29                 r++;
30         }
31         c = (l == 0)?1:c+l+r;
32         return c;
33     }
34 }
35 
36 int main()
37 {
38     int a[MAX];
39     memset(a, 0, sizeof(a));
40     while(cin>>n)
41     {
42         for(int i=0;i<n;i++) cin>>a[i];
43         cout<<fun(a)<<endl;
44     }
45     return 0;
46 }
View Code

2019-02-05

18:55:04

蚂蚁感冒

标签:有一个   计算   clu   ems   isp   span   sed   abs   algo   

原文地址:https://www.cnblogs.com/mabeyTang/p/10352981.html

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