蓝桥杯-- 蚂蚁感冒
原创
©著作权归作者所有:来自51CTO博客作者不想悲伤到天明的原创作品,请联系作者获取转载授权,否则将追究法律责任
题解: 分情况讨论, 总体是第一个感冒的蚂蚁到底朝哪边,如果朝右边,那么能被感染的一定是,第一个感冒蚂蚁位置右边朝左走的
以及右边朝左走的,还有就是如果朝左边,那么能被感染的一定是左边朝右走的和右边朝左走的蚂蚁.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <set>
#include <cstring>
#include <stack>
#include <set>
#include <vector>
#include <queue>
#define Swap(a,b) a ^= b ^= a ^= b
#define pi acos(-1)
#define cl(a,b) memset(a,b,sizeof(a))
using namespace std ;
typedef long long LL;
//const int N = 1e7+10 ;
const int inf = 0x3f3f3f3f;
const int MAX = 50005;
int a[100] ;
int main()
{
int n ;
cin >>n ;
for(int i = 1 ; i <= n ; i++){
cin >>a[i] ;
}
int left = 0 , right = 0 ;
if(a[1]>0 ){// 如果感冒的蚂蚁向右爬
for(int i = 2 ; i <=n; i++ ){
if(a[i]<0 && abs(a[i])>abs(a[1])){
right++ ;// 记录感冒蚂蚁右边向左爬的数量
}
if (a[i]>0 && abs(a[i]) <a[1]){
left++ ; // 记录感冒蚂蚁左边向右爬的数量
}
}
}
else if(a[1]<0){ // 如果感冒的蚂蚁向左爬
for(int i = 2 ; i<=n ; i++){
if(a[i]>0 &&abs(a[i])<abs(a[1]))
left++ ;// 记录感冒蚂蚁左边向右爬的数量
if(a[i]<0 && abs(a[i])>abs(a[1]))
right++ ;// 记录感冒蚂蚁右边向左的数量
}
}
// 特判 , 当第一个向左爬的感冒蚂蚁左边没有蚂蚁或者
//当第一个向右爬的感冒蚂蚁右边没有蚂蚁时,不感染其他蚂蚁
if(a[1]<0 && left == 0 || a[1]>0 && right == 0){
cout<<"1"<<endl ;
}
else
cout<<left + right +1 <<endl;
return 0 ;
}