切換
舊版
前往
大廳
主題

ZeroJudge - f290: 德潤的大軍 解題心得

Not In My Back Yard | 2020-10-07 00:18:43 | 巴幣 0 | 人氣 384

題目連結:


題目大意:
第一列給定一正整數 N (1 < N ≦ 10 ^ 6),代表有 N 個士兵。接著的一列給定 N 個正整數,其中給定的第 i 個正整數 Pi (Pi ≦ 10000),代表第 i 個士兵的防禦力,且他站在位置 i 。

除了頭與尾的士兵之攻擊力恰等於他們自身的防禦力以外,其他士兵的攻擊力是他旁邊兩位士兵的防禦力之總和。

請將士兵排序後並依序輸出他們的攻擊力以及防禦力。排序依據為,先依照攻擊力由小到大排,若攻擊力一樣再依照防禦力由小到大排。



範例輸入:
範例輸入一:
2
9 5

範例輸入二:
3
1 7 3


範例輸出:
範例輸出一:
5 5
9 9

範例輸出二:
1 1
3 3
4 7


解題思維:
就跟這些自定義排序方式的題目一樣(如這題)。就是用一個結構(Struct)將士兵的防禦力與攻擊力包起來,然後寫一個專門的大小判斷函式或是運算子,然後排序依照題目要求即可。

至於攻擊力也沒什麼特別的技巧,就是真的求每個士兵(除了頭尾的士兵)的前一個以及後一個士兵的防禦力加總即可。

但是因為資料量比較多,所以需要最佳化一下輸出入的速度(簡單的最佳化即可,如這題)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作