alt alt

思路:

本题说两个蚂蚁相撞之后掉头可以看作一个蚂蚁穿过另一个蚂蚁,相撞之后都感冒了,掉不掉头无所谓,这样只用求第一数据左边有多少个向右走的蚂蚁和右边有多少个向左的蚂蚁,这些蚂蚁肯定会碰头,并且传染。即ans = l+r+1; 加1代表第一个蚂蚁自身
两种特殊情况将会在代码中详细体现:

代码部分:
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int a[N];
int main ()
{
	int n;cin>>n;
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    int t=abs(a[0]);
    int l=0;//第一个蚂蚁右边向左走的蚂蚁个数
    int r=0;//第一个蚂蚁左边向右走的蚂蚁个数
    int sum=0;// 感冒蚂蚁的总个数
    for(int i=1;i<n;i++)
    {
    	if(abs(a[i])<t)
        {
        	if(a[i]>0) r++;
        }
        if(abs(a[i]>t)
        {
        	if(a[i]<0) l++;
        }
    }
    // 如果第一个蚂蚁向左走且第一个蚂蚁的左边没有向右走的,因为速度相同,右边中向左走的蚂蚁永远也追不上第一个和第一个左边的向左走的蚂蚁
    if(a[0]<0&&r==0) cout<<1<<endl;
    // 如果第一个蚂蚁向右走且第一个蚂蚁的右边没有向左的,因为速度相同,左边中向右走的蚂蚁永远也追不上第一个和第一个右边的向右走的蚂蚁
    else if(a[0]>0&&l==0) cout<<1<<endl;
	else sum=l+r+1;
    return 0;
}