PA2014 Bohater 題解(貪心)

2022-03-26 10:28:09 字數 1251 閱讀 2253

前言:一道經典貪心題。

題目鏈結

題目大意:你有$z$滴血,要打$n$只怪。打第$i$只怪扣$d_i$滴血,回$a_i$滴血。問是否存在一種能夠通關的打怪順序。

顯然所有怪分為兩種:扣血的怪$d_i>a_i$和回血的怪$d_i\leq a_i$。那麼貪心策略是什麼?

對於回血的怪,我們有若干貪心策略,例如:

1.按照$d_i$公升序排列。

2.按照$a_i$降序排列。

3.按照$a_i-d_i$降序排列

$\cdots$

我們選擇第一種。打個形象的比喻:假如你砍它一秒一刀$999999999$,但是它一秒一刀砍你$99999999$,你有$9999999$滴血,那顯然會掛。所以我們只能從零開始打怪生活。

對於扣血的怪,我們是按照$a_i$降序排列。理由很簡單:反正怎麼都是扣血,我們還不如先把回血多的怪打了。反正如果你通不了關,那無論什麼順序都沒有用。

在輸入的時候講怪進行分類,分別處理即可。

**:

#includeusing

namespace

std;

intn,z;

struct

node

add[

100005],kou[100005

];int

addcnt,koucnt;

inline

intread()

while(isdigit(ch))

return x*f;

}bool

cmp1(node a,node b)

bool

cmp2(node a,node b)

intmain()

;}

else;}

}sort(add+1,add+addcnt+1

,cmp1);

sort(kou+1,kou+koucnt+1

,cmp2);

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

else z=z-add[i].d+add[i].a;

}for (int i=1;i<=koucnt;i++)

else z=z-kou[i].d+kou[i].a;

}cout

<<"

tak"

for (int i=1;i<=koucnt;i++) cout<"";

return0;

}

PA2014部分題解

之前有一些寫過了大概扔在奇奇妙妙的地方 可能翻一下blog能翻得到的 瞎寫一下最近的題吧 2 242 224這個狀壓和爆搜尷尬的地位 90 s90s 90s果斷狀壓了 把包從大到小排序,記乙個pai rpair pair 的d p mask dp mask dp mas k 表示裝完狀態裡的這些東西...

PA12題解報告 迴圈移位 Cycle

題目描述 題目分析 編碼實現 1.描述 所謂迴圈移位是指。乙個字串的首字母移到末尾,其他字元的次序保持不變。比如abcd經過一次迴圈移位後變成bcda。給定兩個字串,判斷它們是不是可以通過若干次迴圈移位得到彼此。2.輸入 由m行組成,每行包含兩個由大寫字母 a z 組成的字串,中間由空格隔開。3.輸...

BJWC 2014 資料 題解

題目傳送門 題目大意 給出 n nn 個點,有 m mm 次操作,每次為 1 新增乙個點 2 求點集中離詢問點最近的點到詢問點的距離 3 詢問點集中離詢問點最遠的點到詢問點的距離。k d tree裸題。先維護一下每棵子樹對應的矩陣。找最近點的剪枝是 先去左右子樹中離離詢問點比較近的矩陣。找最遠點的剪...