蚂蚁感冒 第五届蓝桥杯省赛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