Open LarryLuTW opened 8 years ago
一根長度 L 公分的木棍 上面有 n 隻螞蟻 每支螞蟻會向左爬或向右爬 速度都是 1 公分/秒 兩螞蟻相撞則兩隻都轉身朝各自的反方向前進
若已知每支螞蟻的初始位置及方向 計算要經過幾秒之後所有的螞蟻都能爬出木棍
第一行為螞蟻數量 n 及木棍長度 L 接下來的每一行是每一支螞蟻的位置 x 及方向 d x 代表該螞蟻離木棍左端的距離 d 代表方向(0 表示向左, 1 表示向右)
n <= 10^5 L <= 10^6
需要多少時間 才能讓所有螞蟻爬出木棍
4 10 1 0 3 1 5 0 7 1
7
開一個struct裡面有x,v分別表示起始位置和方向,再用一個set紀錄樹枝上面還有幾隻螞蟻,並跑兩層迴圈,外層為秒數,內層為螞蟻,如果相撞就交換v,並順便判斷有沒有到終點。 時間複雜度:O(N*L)
不需要調頭,因為AB兩隻螞蟻即時調頭了,走得距離也是一樣,所以只需要繼續走,感覺像是換了靈魂一樣XD 所以我們只需要計算誰離終點比較遠即可。 時間複雜度:O(N)
我剛剛看了螞蟻的 code 還滿棒的
內容:
一根長度 L 公分的木棍 上面有 n 隻螞蟻 每支螞蟻會向左爬或向右爬 速度都是 1 公分/秒 兩螞蟻相撞則兩隻都轉身朝各自的反方向前進
若已知每支螞蟻的初始位置及方向 計算要經過幾秒之後所有的螞蟻都能爬出木棍
輸入說明:
第一行為螞蟻數量 n 及木棍長度 L 接下來的每一行是每一支螞蟻的位置 x 及方向 d x 代表該螞蟻離木棍左端的距離 d 代表方向(0 表示向左, 1 表示向右)
n <= 10^5 L <= 10^6
輸出說明:
需要多少時間 才能讓所有螞蟻爬出木棍
範例輸入:
範例輸出: