您的位置:首页 > 其它

蓝桥杯历届试题 蚂蚁感冒

2018-03-20 11:45 387 查看
题意:一根100cm长的细杆上,有许多只蚂蚁,他们或朝左,或朝右,处于不同的位置,但速度相同,为1cm/s。其中有一只蚂蚁身患感冒,且会传染与它碰面的蚂蚁。给定所有蚂蚁的初始位置,以及他们的方向,求最后染上感冒的蚂蚁的数量。

结论:已知第一只蚂蚁为感染源,设为蚂蚁x,分析易得,结果=x前进方向与他反向的蚂蚁数量+x前进反方向与他同向的蚂蚁数量(前提是前者数量不为0)。

ac代码:

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;

typedef long long ll;
const int N=1e5+5;

bool cmp(int x,int y){
return abs(x)<abs(y);
}
int main(){
int n;
scanf("%d",&n);
int a[51];
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int ans,t=a[0];
if(a[0]>0){
sort(a,a+n,cmp);
int pos=n-1;ans=1;
while(a[pos]!=t){
if(a[pos]<0) ans++;
pos--;
}
t=0;
for(int i=0;i<pos;i++) if(a[i]>0) t++;
if(ans==1) puts("1");
else
4000
printf("%d\n",ans+t);
}
else{
sort(a,a+n,cmp);
int pos=0;ans=1;
while(a[pos]!=t){
if(a[pos]>0) ans++;
pos++;
}
t=0;
for(int i=pos+1;i<n;i++) if(a[i]<0) t++;
if(ans==1) puts("1");
else printf("%d\n",ans+t);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: