藍橋杯 螞蟻感冒 模擬

2021-10-02 15:25:45 字數 1420 閱讀 1982

題目

長 100 厘公尺的細長直桿子上有 n 只螞蟻。

它們的頭有的朝左,有的朝右。

每只螞蟻都只能沿著桿子向前爬,速度是 1 厘公尺/秒。

當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。

這些螞蟻中,有 1 只螞蟻感冒了。

並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。

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

輸入格式

第一行輸入乙個整數 n, 表示螞蟻的總數。

接著的一行是 n 個用空格分開的整數 xi, xi 的絕對值表示螞蟻離開桿子左邊端點的距離。

正值表示頭朝右,負值表示頭朝左,資料中不會出現 0 值,也不會出現兩隻螞蟻占用同一位置。

其中,第乙個資料代表的螞蟻感冒了。

輸出格式

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

資料範圍

1螞蟻感冒-思維-經典題)。

我使用的是模擬做法,定義螞蟻的物件,它們具有移動和掉頭的行為,開乙個陣列存所有螞蟻。判斷兩隻螞蟻碰頭有兩種情況:1、方向相反,座標相差1,即剛好接觸。2:方向相反,座標相等,處於同一位置。

然後就可以開始模擬,已經爬出範圍內的螞蟻從陣列裡刪掉就好。

#include

using

namespace std;

struct ant

;ant

(int p,

int d,

int i)

:pos

(p),

dis(d)

,ill

(i);

void

mov(

)bool

jud(

)void

change()

};bool

cmp(ant a, ant b)

int n;

vector ant;

// 存放所有在桿子上的螞蟻

intmain()

ant[0]

.ill =

true

;sort

(ant.

begin()

, ant.

end(

), cmp)

;int res =1;

while(1

)}for(

auto it = ant.

begin()

; it != ant.

end();

)}if(ant.

size()

==0)break;}

cout << res << endl;

return0;

}

藍橋杯 螞蟻感冒 (模擬)

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

藍橋杯 螞蟻感冒

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

藍橋杯 螞蟻感冒

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