切換
舊版
前往
大廳
主題

ZeroJudge - b311: 強襲堡壘 解題心得

Not In My Back Yard | 2019-10-21 23:17:44 | 巴幣 0 | 人氣 230

題目連結:


題目大意:
給定一正整數 N (0 ≦ N ≦ 100000),代表有 N 座堡壘要摧毀。接著的 N 列輸入,每列給定兩個不超過 100 的非負整數,分別代表此堡壘一開始的強度,以及每單位時間會增加的強度值。

堡壘的強度等同於攻略的時間花費量。求至少要花多少單位時間才能摧毀這 N 座堡壘。請將答案取 100000007 的餘數之後輸出。



範例輸入:
5
0 9
1 5
2 4
6 3
3 0


範例輸出:
37


解題思維:
這題的想法相似。

假設有兩座堡壘 a 、 b ,其一開始強度 Sa 、 Sb ,每單位時間增加 Pa 、Pb 的強度且目前已經花了 T 單位的時間攻略其他堡壘。

則先攻擊堡壘 a 再來是 b ,則會花費
(Sa + T × Pa) + (Sb + (Sa + T × Pa + T) × Pb
單位時間。
如果順序反過來,則會花
(Sb + T × Pb) + (Sa + (Sb + T × Pb + T) × Pa
單位時間。

去掉兩者相同的項次,最後剩下:
Sa × Pb
以及
Sb × Pa

如果 Sa × Pb < Sb × Pa ,則需要先攻略堡壘 a 才會使時間較小。

因此,我們可以將 N 個堡壘以上述的條件去排序攻略的先後順序。但是上述條件有一個缺陷,當有一個堡壘的 S 、 P 值皆為 0 時,會造成排序錯誤。(因為上述條件是兩兩比較,當有兩者的數值都是 0 時條件會炸裂)

所以我們需要先攻略那種堡壘,但是因為強度為 0 、單位時間增加 0 的強度。因此在輸入的時候就可以忽略,因為不會影響總攻略時間。

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

創作回應

更多創作