木棒上的螞蟻

2021-08-09 01:14:32 字數 1342 閱讀 6131

一根長度為1公尺的木棒上有若干只螞蟻在爬動。它們的速度為每秒一厘公尺或靜止不動,方向只有兩種,向左或者向右。如果兩隻螞蟻碰頭,則它們立即交換速度並繼續爬動。三隻螞蟻碰頭,則兩邊的螞蟻交換速度,中間的螞蟻仍然靜止。如果它們爬到了木棒的邊緣(0或100厘公尺處)則會從木棒上墜落下去。在某一時刻螞蟻的位置各不相同且均在整數厘公尺處(即1,2,3,…99厘公尺),有且只有乙隻螞蟻a速度為0,其他螞蟻均在向左或向右爬動。給出該時刻木棒上的所有螞蟻位置和初始速度,找出螞蟻a從此時刻到墜落所需要的時間。

輸入 第一行包含乙個整數表示螞蟻的個數n(2<=n<=99),之後共有n行,每一行描述乙隻螞蟻的初始狀態。每個初始狀態由兩個整數組成,中間用空格隔開,第乙個數字表示初始位置厘公尺數p(1<=p<=99),第二個數字表示初始方向,-1表示向左,1表示向右,0表示靜止。

輸出 螞蟻a從開始到墜落的時間。若不會墜落,輸出「cannot fall!」

輸入樣例

copy

2 44 0

41 1

2 13 0

63 1

4 56 0

64 -1

85 -1

47 1

輸出樣例

copy

59 cannot fall!

85

#include 

using

namespace

std;

struct ant

;bool cmp(ant a,ant b)

sort(a,a+n,cmp);

for(int i=0;iif(!flag&&a[i].d==1)

if(a[i].d==0)

if(flag&&a[i].d==-1)

}// cout<<"cannot fall!"

if(count_l>count_r)

cout

<<100-b[count_l-count_r-1].xcout

<2*count_l].x0;}

參考了下網上的解析,期間,我想用vector來儲存螞蟻,方便刪改,後開看到網上用兩個陣列來解決,第乙個陣列a用來存放最初的陣列,b用來存放刪改後的陣列(即合格的螞蟻)。

這個問題有點類似於物理中的動量問題,不必考慮的太仔細,要考慮靜止螞蟻是否能夠掉落,以及什麼時候掉落,只需要考慮此螞蟻左邊向右走的螞蟻、右邊向左走的螞蟻即可(我稱其為合格螞蟻)。

如果左邊螞蟻與右邊螞蟻數目相等,則無法掉落。如果左》右,則會從右邊掉落。如果右》左,則會從左邊掉落。就是最後乙個撞到這個螞蟻a的螞蟻b(左右兩邊抵消後離螞蟻a最近的乙個螞蟻)撞了螞蟻a之後,螞蟻a會向反方向走並掉落。其掉落時間則為,從螞蟻b的位置走向向反方向末端所需要的時間,這裡也就是距離。

CDOJ 木桿上的螞蟻

description 在一根細木桿上,有一些速度相同螞蟻,它們有的往左走,有的往右走,木桿很細,只允許乙隻螞蟻通過,所以當兩隻螞蟻碰頭的時候,它們會掉頭繼續前進,直到走出邊界,掉下木桿。已知木桿的長度和每只螞蟻的名字 位置和初始方向,問依次掉下木桿的螞蟻花費的時間以及它的名字。input 輸入包含...

木棍上的螞蟻jolj2466 模擬法

一根長度為c厘公尺的木棍上有n只螞蟻,每只螞蟻要麼朝左爬,要麼朝右爬,速度為1厘公尺 秒。當兩隻螞蟻相撞時,二者同時掉頭 掉頭時間忽略不計 給出每只螞蟻的初始位置和朝向,計算t秒之後每只螞蟻的位置。輸入格式 輸入的第一行為資料組數。每組資料的第一行為3個正整數c t n 0 n 10000 以下n行...

螞蟻的故事

老婆生活記錄 螞蟻是地球上最常見的昆蟲,數量最多的昆蟲種類。螞蟻好小,只有幾公釐,乙隻螞蟻的重量只有 0.005 克,很多動畫片裡都有它的身影,百威啤酒的廣告也讓小小螞蟻變成了最可愛的小東西,對這樣的乙個小可愛,你會怕它嗎?今天,閒暇之餘對幾個朋友做了乙個小小的調查,問他們是否怕螞蟻?片刻,朋友們的...