題目大意:一根長l厘公尺的木棍上有n只螞蟻,每只螞蟻有個開始的位置和爬行方向,速度為1.當兩隻螞蟻相撞後,兩者同時掉頭繼續爬行,求按輸入順序給出每只螞蟻t秒後的位置後朝向。
解題思路:
1.每只螞蟻相撞後同時掉頭可以看做對穿而過,關鍵的問題就在於求位置的變化。
2.按位置從小到大排序,可以驚奇的發現排序後(befor陣列和after陣列)所有的螞蟻相對位置並沒有變化,改變的只是朝向。
1 #include 2 #include 3 #include 4 #include 5using
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陣列 用來處理紅棋在棋盤上產生的對黑棋的限制。將紅棋的馬 車 炮 將寫成函式來分別處理。這樣處理完之後,判斷一下黑棋的...