UVA 10881 經典模擬題

2022-05-02 21:51:10 字數 1072 閱讀 8045

題目大意:一根長l厘公尺的木棍上有n只螞蟻,每只螞蟻有個開始的位置和爬行方向,速度為1.當兩隻螞蟻相撞後,兩者同時掉頭繼續爬行,求按輸入順序給出每只螞蟻t秒後的位置後朝向。

解題思路:

1.每只螞蟻相撞後同時掉頭可以看做對穿而過,關鍵的問題就在於求位置的變化。

2.按位置從小到大排序,可以驚奇的發現排序後(befor陣列和after陣列)所有的螞蟻相對位置並沒有變化,改變的只是朝向。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

const

int maxn=10005;8

9struct

node

1016

} befor[maxn],after[maxn];

1718

char dirname[10]=;

19int

order[maxn];

2021

intmain()22;

37 after[i]=(node); //

所以的螞蟻相撞後可以看做對穿而過38}

39 sort(befor,befor+n);

40for(int i=0; i//

最巧妙的地方在這裡,第一次從左到右所有的螞蟻的相對位置沒有變化

41 order[befor[i].id]=i;

42 sort(after,after+n);

43for(int i=0; i1; i++)

44if(after[i].p==after[i+1].p) after[i].d=after[i+1].d=0;45

for(int i=0; i)

4652

else

53 printf("

fell off\n");

54}55 puts(""

);56}57

return0;

58 }

UVa10881題解報告

題目 l長的棍子上有n個螞蟻,他們分別向左或右爬,速度為1,求t時間後各螞蟻的狀態 題解 白書給出了乙個很巧妙的解法,將螞蟻看作質點,相撞掉頭等於對穿而過。因為掉頭所以,他們最後的順序與輸入時在棍子上的順序相同。所以只要記錄下初始狀態下螞蟻的順序,算出結束後的位置後根據上面的順序輸出就可以了。這個思...

模擬暴力 uva12108

這道題是紫書第四章的習題,拖了好久了。其實我這裡我用了取巧的方法 我假設如果過去了1e7秒,還沒有出現所有人認真聽課的情況的話,那麼就永遠不會出現所有人認真聽課的情況了,然後ac了。關鍵在於一些細節的處理,比如編號從0開始,初始狀態的處理等等。includeusing namespace std i...

UVA 1589 象棋(模擬)

題目 傳送門 給出乙個象棋的殘局,下一步是黑棋走,判斷黑棋是不是被將死。思路 讀完這個題,知道是乙個模擬題,然後想到用兩個二維陣列來模擬棋盤,乙個 mp陣列 用來存殘局,乙個 res陣列 用來處理紅棋在棋盤上產生的對黑棋的限制。將紅棋的馬 車 炮 將寫成函式來分別處理。這樣處理完之後,判斷一下黑棋的...