藍橋杯 螞蟻感冒(迴圈)

2021-10-23 10:58:13 字數 1064 閱讀 9779

題目

長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。

每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺/秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。

這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。

請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了感冒。

輸入格式

第一行輸入乙個整數n (1 < n < 50), 表示螞蟻的總數。

接著的一行是n個用空格分開的整數 xi (-100 < xi < 100), xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,資料中不會出現0值,也不會出現兩隻螞蟻占用同一位置。其中,第乙個資料代表的螞蟻感冒了。

輸出格式

要求輸出1個整數,表示最後感冒螞蟻的數目。

樣例輸入

35 -2 8

樣例輸出

1樣例輸入

5-10 8 -20 12 25

樣例輸出

3陷阱與思路

陷阱1:這題的杆的長度和螞蟻爬行速度都是陷阱,如果考慮這些就走入了誤區。

思路1:因為每乙隻螞蟻速度都相等,可以判斷只有相對爬行的螞蟻才會相遇,且所有相對爬行的螞蟻都會相遇。

陷阱2:其次是每次碰面,兩隻螞蟻都會反向而行,如果你的思路真的按著這個模擬,就和撞球一樣對對碰,估計是難以知道什麼時候才能結束了。

思路2:實際上,螞蟻只有感冒和沒感冒之分,因此當感冒的螞蟻與沒感冒的螞蟻相碰時,這兩隻螞蟻已經是一樣的了,相碰然後反向爬行完全可以看作相碰然後沿著原路繼續爬行。

思路3:實際上,被感染的鏈路是這樣的,第一只螞蟻會感染與它相遇的每乙隻螞蟻,然後第一被感染的螞蟻會感染與第一只螞蟻同行且在它後面的螞蟻。只有這兩隻螞蟻會感染其他螞蟻,其他螞蟻不具感染條件

**

#includeusing namespace std;

int main();

for(int i=0;i>away[i]; }

if(away[0]>0)

}else

} cout

}

藍橋杯 螞蟻感冒

時間限制 1 sec 記憶體限制 128 mb 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你...

藍橋杯 螞蟻感冒

問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...

藍橋杯 螞蟻感冒

長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了...