蓝桥杯C++ AB组
思路:既然碰到就会传染而且是相同速率运动,那么我们就可以看作是碰撞以后不掉头;那么不管是第一只蚂蚁向哪个方向运动,只要是它左边的蚂蚁向右运动,它右边的蚂蚁向左运动,就可以被感染。那么结果就是ans=left+right+1,left是左边的蚂蚁向右运动,right是右边的蚂蚁向左运动的个数,1是它自己;
有两种特殊情况,就是当第一只蚂蚁的运动方向路途中没有致使它返回的蚂蚁,那么相反方向的right/left即使有值,也不会起作用
错误代码:虽然过了,但是样例2 8 -10样例是错误的
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<set> #include<map> using namespace std; const int maxx=1e4+10; int main(){ int n; scanf("%d",&n); int a[100]; int left=0,right=0; for(int i=0;i<n;i++){ scanf("%d",&a[i]); if(a[i]>0&&abs(a[i])<abs(a[0])){ left++; }else if(a[i]<0&&abs(a[i])>abs(a[0])){ right++; } } if(left==0||right==0){ printf("1\n"); }else{ printf("%d\n",left+right+1); } }