编程语言
首页 > 编程语言> > 蚂蚁感冒 第五届蓝桥杯省赛C++A/B组

蚂蚁感冒 第五届蓝桥杯省赛C++A/B组

作者:互联网

此题为数学题

需要发现一个特点:未感染的蚂蚁相互碰撞后,相当于穿过了对方,和两方掉头的意思是一样的

所以最终答案是:第一只感冒蚂蚁左边向右走的蚂蚁的数量 + 第一只感冒蚂蚁右边向左走的蚂蚁的数量 + 第一只蚂蚁本身

但有一些特殊情况:
1.第一只感冒蚂蚁在最左边且向左走 答案为1
2.第一只感冒蚂蚁在最右边且向右走 答案为1
3.当第一只感冒的蚂蚁向左走时,如果它左边向右走的蚂蚁为0 答案为1
4.当第一只感冒的蚂蚁向右走时,如果它右边向左走的蚂蚁为0 答案为1


#include <iostream>
#include <algorithm>

using namespace std;

const int N = 55;

int n;
int a[N];

int main()
{
    cin >> n;
    cin >> a[0];
    int res = 1;
    int l, r;//记录最左边和最右边的蚂蚁是哪一只
    l = r = abs(a[0]);
    int fl = 0, fr = 0;//记录第一只感冒的蚂蚁的左边和右边是否有蚂蚁
    for(int i = 1; i < n; i ++)
    {
        cin >> a[i];
        l = min(l, abs(a[i]));
        r = max(r, abs(a[i]));
        
        if(abs(a[i]) < abs(a[0]) && a[i] > 0)
        {
            res ++;
            fl = 1;
        }
        if(abs(a[i]) > abs(a[0]) && a[i] < 0)
        {
            res ++;
            fr = 1;
        }
    }
    if(l == abs(a[0]))
    {
        if(a[0] < 0)    cout << 1 << endl;//特殊情况1
        else cout << res << endl;
    }
    else if(r == abs(a[0]))
    {
        if(a[0] > 0)    cout << 1 << endl;//特殊情况2
        else cout << res << endl;
    }
    else
    {
        if(fl == 0 && a[0] < 0) cout << 1 << endl;//特殊情况3
        else if(fr == 0 && a[0] > 0) cout << 1 << endl;//特殊情况4
        else cout << res << endl;
    }
    return 0;
}

标签:蚂蚁,int,向左走,感冒,C++,蓝桥,abs,向右走,省赛
来源: https://www.cnblogs.com/xulizs666/p/14629025.html