問題描述:n只螞蟻以每秒1cm的速度在長為lcm的竹竿上爬行。當螞蟻看到竿子的端點時就會落下來。由於竿子太細,兩隻螞蟻相遇時,它們不能交錯通過,只能各自反方向爬行。對於每只螞蟻,我們只知道它離竿子最左端的距離為xi,但不知道它當前的朝向。請計算所有螞蟻落下竿子的最短時間和最長時間。
對於最短時間,我們可以考慮當所有螞蟻都向(以中線為界)最近的端點移動時,這時不會發生兩隻螞蟻相碰的情況,也就是時間最短的情況。對於最長時間,你也許會想螞蟻有向左向右兩種情況,相碰之後又向相反的方向移動,n只螞蟻就有2n種可能,要考慮的情況就會特別多,而隨n的增大急劇增加。但兩隻相同的螞蟻相遇時,他們的位置是相同的,可以看成兩隻螞蟻的移動方向沒有發生改變(相當於螞蟻一變成螞蟻二,螞蟻二變成螞蟻一)沒有由於相遇時相互反向移動且速度相同,我們可以認為是依原方向移動。
//1.確定竿的長度、螞蟻的個數、螞蟻距離最左邊的竿邊的距離
int main()
; int maxx=0,minx=0;//對於乙隻螞蟻確定最長的爬行時間,最短的爬行時間
int max=0,min=0;//通過每次與maxx.minx比較確定最後的時間
//最短的時間
for(int i=0;imin?minx:min;
maxx=num[i]>length-num[i]?num[i]:length-num[i];
max=maxx>max?maxx:max;
}cout<
cout<
return 0;
}
螞蟻爬行問題及其改編
問題描述 n只螞蟻以每秒1cm的速度在長為lcm的竹竿上爬行。當螞蟻看到竿子的端點時就會落下來。由於竿子太細,兩隻螞蟻相遇時,它們不能交錯通過,只能各自反方向爬行。對於每只螞蟻,我們只知道它離竿子最左端的距離為x i,但不知道它當前的朝向。請計算所有螞蟻落下竿子的最短時間和最長時間。限制條件 1 l...
螞蟻問題(演算法)
有一根27厘公尺的細木桿,在第3厘公尺 7厘公尺 11厘公尺 17厘公尺 23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距...
3 螞蟻問題
有一根27厘公尺的細木桿,在第3厘公尺 7厘公尺 11厘公尺 17厘公尺 23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距...