題目
長 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只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...