洛谷P1367 螞蟻

2022-05-05 21:33:09 字數 1154 閱讀 4437

螞蟻

【題目描述】

在一根無限長的木棍上,用n只螞蟻,每只螞蟻有乙個初始位置和初始朝向,螞蟻們以每秒乙個單位的速度向前移動,當兩隻螞蟻相遇時,它們會掉頭(掉頭時間忽略不計)。現給出每只螞蟻的初始位置和初始朝向,請你計算出它們在t秒後的位置和朝向。

思路:1.對於每只螞蟻,它的座標在所有螞蟻中的次序無論怎樣移動都不會改變。(因為當兩隻螞蟻相遇時,它們會掉頭)

2.對於兩隻螞蟻同時掉頭,可以看作「兩隻螞蟻交換編號」,繼續向前移動,所以o(logn)的時間(排序)就可以算出最終在乙個確定的位置有乙個不確定編號的螞蟻朝著乙個確定的方向,求出每只螞蟻的編號,可利用性質1

sort是個好東西。。

貼**:

#include#include

#include

#include

using

namespace

std;

intn,t;

struct

ant a[100010

];struct

aaa b[

100010]; //

用於計算最終位置並按座標大小排序,對應到a陣列

bool

cmp1(ant x,ant y)

bool

cmp2(aaa x,aaa y)

bool

c***(ant x,ant y)

intmain()

sort(a+1,a+1+n,cmp1); //

按座標大小排序

for(int i=1;i<=n;i++)

sort(b+1,b+1+n,cmp2); //

按座標大小排序

for(int i=1;i<=n;i++) //

每只螞蟻移動前後座標次序不變

for(int i=1;i)

if(a[i].ans==a[i+1].ans) a[i].fx=a[i+1].fx=0; //

若恰好正在轉身,輸出0

sort(a+1,a+1+n,c***);

for(int i=1;i<=n;i++)

printf(

"%d %d\n

",a[i].ans,a[i].fx);

return0;

}

洛谷P1916 小書童 螞蟻大戰

小a在你的幫助下,開始 刷題 他在小書童裡發現了一款叫 螞蟻大戰 又稱蛋糕保衛戰 的遊戲。你懂得 遊戲中會出現n只螞蟻,分別有a1,a2 an的血量,它們要吃你的蛋糕。當然,你不會袖手旁觀。你有m元錢,可以用來造防禦塔,每個塔k元。塔的威力是每秒w滴血。此外,在第r秒時,螞蟻會把蛋糕搬進窩。小a想知...

洛谷P5049 洛谷P5022 題解 旅行

原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...

洛谷練習P2279 P1346

2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...