这题主要是将题目中容易迷惑的条件转化为易于做题的条件,题中说当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行,可以转化为两只蚂蚁相遇后继续沿原方向前进。
这样就很容易得出,当第一只蚂蚁向右运动时,所有在它右边向左运动的蚂蚁都会感冒,并且在第一只蚂蚁后面向右运动的蚂蚁也会感冒。
同理,当第一只蚂蚁向左运动时,所有在它左边向右运动的蚂蚁和在它后面向左运动的蚂蚁都会感冒。
#include<iostream> using namespace std; int main() { int t, l=0,r=0; cin>>t; int n[t]; for(int i=0;i<t;i++){ cin>>n[i]; if(n[i]<0&&i!=0&&n[i]<n[0])l++; if(n[i]>0&&i!=0&&n[i]<n[0])r++; } int ans=1; if(n[0]>0){ for(int i=1;i<t;i++) { if(n[0]<abs(n[i])&&n[i]<0)ans++; } if(ans!=1)ans+=r; } else { for(int i=1;i<t;i++) { if(abs(n[0])>n[i]&&n[i]>0)ans++; } if(ans!=1)ans+=l; } cout<<ans; }