/*
解题思路
首先根据题意可知
1.蚂蚁速度均为1 即同向蚂蚁永远不可能追上
我们需要求最后感冒蚂蚁的数量
因为蚂蚁碰头将会掉头
效果和俩蚂蚁互相穿过继续走是一样的
所以我们将俩蚂蚁碰头视作穿过
2.
如果俩蚂蚁相向而行 则俩蚂蚁必定碰头
首先 我们获得第一个感冒蚂蚁的位置和方向
开始第一次遍历 找该蚂蚁左边是否存在可以被感冒的蚂蚁
并且标记一个mask
用来记录该蚂蚁左边是否存在向右走的蚂蚁
如果第一个蚂蚁向左走
且该蚂蚁的左边存在向右走的蚂蚁
每遇到一个向右走的蚂蚁则 计数器+1
并且 一旦这个向左走的蚂蚁遇到一个向右的蚂蚁
将mask标记做一个修改
此时我们就获得了向右走的感冒蚂蚁
然后我们开始第二次搜索
找该蚂蚁右边是否存在可以被感冒的蚂蚁
首先如果刚刚的mask被修改过
则存在向右走的感冒蚂蚁
为了计数的方便我们将碰头视作穿过
但实际是反向 因此第一只向右走的感冒蚂蚁的位置实际是a[0]的位置
于是我们第二次搜索条件就是 位置在a[0]右边且向左走的蚂蚁
遇到一只则计数器++;
如果第一只蚂蚁向右左则对称分析即可
*/
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110;
int a[N];
int cnt=1;
int main(){
int n;
cin>>n;
cin>>a[0];
bool mask=true;
int mask2=0;
if(a[0]<0){
a[0]=-a[0];
mask=false;
for(int i=1;i<n;i++){
cin>>a[i];
if((mask==false)&&a[i]>0&&a[i]<a[0]){
cnt++;
mask2=1;
//cout<<"1++"<<endl<<a[i]<<endl;
}
}
for(int i=1;i<n;i++){
if(mask2==1&&a[i]<0&&abs(a[i])>a[0]){
cnt++;
///cout<<"2++"<<endl<<a[i]<<endl;;
}
}
}else{
for(int i=1;i<n;i++)
{
cin>>a[i];
if(a[i]<0&&abs(a[i])>a[0]){
mask2=1;
cnt++;
}
}
for(int i=1;i<n;i++)
{
if(mask2==1&&a[i]>0&&abs(a[i])<a[0]){
cnt++;
}
}
}
cout <<cnt;
return 0;
}