藍橋杯C++ AB組
阿新 • • 發佈:2022-03-15
思路:既然碰到就會傳染而且是相同速率運動,那麼我們就可以看作是碰撞以後不掉頭;那麼不管是第一隻螞蟻向哪個方向運動,只要是它左邊的螞蟻向右運動,它右邊的螞蟻向左運動,就可以被感染。那麼結果就是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); } }