新博客的第一道题 蓝桥杯 蚂蚁感冒

题意呢,就是有n只蚂蚁在杆子上,给出每只蚂蚁的坐标,他们头的朝向不同,有的向左,有的向右,他们以每分钟(还是每秒钟来着了……)一厘米的速度移动,两只蚂蚁碰头的时候两只都会向相反方向走,第一只蚂蚁感冒了(阿嚏……),和它接触的每只蚂蚁都会感冒,问当所有蚂蚁爬离杆子,有多少只感冒的

思路呢,因为所有速度相同,所以谁都追不上谁……然后呢这只感冒的蚂蚁面向的方向和他朝向相反的蚂蚁都会感冒(阿嚏……阿嚏……阿嚏……),如果他前面没有朝向和他相反的,那到最后就这一只蚂蚁感冒……如果有的话,不仅前面的蚂蚁会感冒,它后面的和它原来朝向相同的蚂蚁也会感冒,思路很清晰,代码不难,但是不太好想……

这道题练习的时候judge错了,本来做过一遍了,顺利地打完代码交上去发现错了,不由得开始质疑人生……

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<math.h>
 6 using namespace std;
 7 int main(){
 8     int n;
 9     while(~scanf("%d",&n)){
10         int a;
11         int tou[105],sum=0;
12         int ganmao;
13         scanf("%d",&ganmao);
14         memset(tou,0,sizeof(tou));
15         for(int i=0;i<n-1;i++){
16             scanf("%d",&a);
17             if(a<0) {a*=-1;tou[a]=-1;}
18             else tou[a]=1;
19         }
20         if(ganmao>0){
21             for(int i=ganmao;i<=100;i++){
22                 if(tou[i]==-1) sum++;
23             }
24             if(sum){
25                 for(int i=ganmao;i>=0;i--){
26                     if(tou[i]==1) sum++;
27                 }
28             }
29         }
30         else if(ganmao<0){
31             ganmao*=-1;
32             for(int i=ganmao;i>=0;i--){
33                 if(tou[i]==1) sum++;
34             }
35             if(sum){
36                 for(int i=ganmao;i<=100;i++){
37                     if(tou[i]==-1) sum++;
38                 }
39             }
40         }
41         printf("%d
",sum+1);
42     }
43     return 0;
44 }
45 //数值蚂蚁离开杆子左边端点的距离 正值表示头朝右 负值表示头朝左
View Code
原文地址:https://www.cnblogs.com/general10/p/5244101.html