蓝桥杯C++ AB组

1.1211. 蚂蚁感冒 - AcWing题库

思路:既然碰到就会传染而且是相同速率运动,那么我们就可以看作是碰撞以后不掉头;那么不管是第一只蚂蚁向哪个方向运动,只要是它左边的蚂蚁向右运动,它右边的蚂蚁向左运动,就可以被感染。那么结果就是ans=left+right+1,left是左边的蚂蚁向右运动,right是右边的蚂蚁向左运动的个数,1是它自己;

有两种特殊情况,就是当第一只蚂蚁的运动方向路途中没有致使它返回的蚂蚁,那么相反方向的right/left即使有值,也不会起作用

错误代码:虽然过了,但是样例2     8 -10样例是错误的

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
const int maxx=1e4+10;
int main(){
    int n;
    scanf("%d",&n);
    int a[100];
    int left=0,right=0;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        if(a[i]>0&&abs(a[i])<abs(a[0])){
            left++;
        }else if(a[i]<0&&abs(a[i])>abs(a[0])){
            right++;
        }
    }
    if(left==0||right==0){
        printf("1\n");
    }else{
        printf("%d\n",left+right+1);
    }
}

 

posted @ 2022-03-15 21:25  bonel  阅读(53)  评论(0编辑  收藏  举报