思路:
首先,和选定蚂蚁能够头碰头相遇的一定会被感染,若要头碰头相遇,则方向相反,满足一定位置条件(比如起始蚂蚁向右移动,则另外一只在起始蚂蚁右侧且向左运动的蚂蚁会与其相遇),用变量must记录满足这样条件的蚂蚁数量
其次,如果must不为零,那么上述一种相遇情况出现后,第二种也会出现:与起始蚂蚁方向相同且位置在起始蚂蚁之后的蚂蚁会被调头的起始蚂蚁感染,用maybe记录这样的蚂蚁
如果must为零,则只有起始蚂蚁感染
若must不为零,则被感染的蚂蚁数目为must + maybe + 1,maybe可以为零
AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
int X[n];
for ( int i = 0; i < n; i ++ )
cin>>X[i];
int must = 0; int maybe = 0;
for ( int i = 1; i < n; i ++ )
{
if( X[0]*X[i] < 0 && X[0] + X[i] <0 )
must++;
//不需要讨论起始蚂蚁的移动方向
if( X[0]*X[i] > 0 && X[0] > X[i] )
maybe++;
}
if( must )
cout<<must + maybe + 1;
else
cout<<must + 1;
return 0;
}