藍橋杯 PREV 27 螞蟻感冒 模擬

2021-06-21 14:54:12 字數 1219 閱讀 5257

歷屆試題 螞蟻感冒  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

長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關於螞蟻在杆上面爬的題目,我以前見過,可是當時嫌麻煩沒寫 t_t 於是藍橋杯初賽這道題杯具了

傳送門:

如果能搞明白螞蟻交換位置和直接穿過去是乙個意思。問題就會迎刃而解。

那道題能用數學方法直接算,用不著一步步模擬,這道題我沒想到類似的解法,只能一步步模擬了

我把螞蟻放到了兩個桿子上面,向左爬的乙個桿子,向右爬的乙個桿子,以避免重疊時覆蓋資料的問題

#include using namespace std;

int main()

,b[101]=;

int n,i,j,ans=0;

cin>>n;

cin>>j;

if (j>0)

a[j]=2;

else

b[-j]=2;

for (i=1;i>j;

if (j>0)

a[j]=1;

else

b[-j]=1; }

while (n)

for (i=98;i;--i)

if (a[i])

if (b[1]>0)

for (i=2;i<100;++i)

if (b[i])

} cout<

kdwycz的**:  

kdwyz的刷題空間:

藍橋杯 PREV 27 螞蟻感冒 模擬

歷屆試題 螞蟻感冒 時間限制 1.0s 記憶體限制 256.0mb 問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,...

藍橋學習 PREV 27

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

藍橋杯 螞蟻感冒 (模擬)

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