题目链接
题目描述
长 100厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米 / 秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有 1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
思路
两只蚂蚁碰头后,会同时掉头往相反方向走,可以视为互相穿过。
这样就转化为:当第一只蚂蚁头朝左时,统计在它左边且头朝右的蚂蚁的个数x,统计在它右边头朝左的个数y,如果x不为0,答案为x+y+1,否则为1
同理第一只蚂蚁头朝右时,统计在它左边且头朝右的蚂蚁的个数x,统计在它右边头朝左的个数y,如果y不为0,答案为x+y+1,否则为1
源代码;
#include<iostream>
#include<cmath>
using namespace std;
int a[50];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
int ans=1;
int b=0,c=0,d=0,e=0;
for(int i=1;i<n;i++)
{
if(abs(a[i])<abs(a[0])&&a[i]*a[0]<0)
b++;
if(abs(a[i])>abs(a[0])&&a[i]*a[0]>0)
c++;
if(abs(a[i])<abs(a[0])&&a[i]*a[0]>0)
d++;
if(abs(a[i])>abs(a[0])&&a[i]*a[0]<0)
e++;
}
if(b!=0&&a[0]<0)
ans+=b+c;
if(e!=0&&a[0]>0)
ans+=d+e;
cout<<ans<<endl;
return 0;
}