bzoj 3203 保護出題人

2021-07-04 10:38:25 字數 988 閱讀 6130

題意:

在乙個詭異的植物大戰殭屍遊戲中,給出n關;

第i關隊首殭屍距房門xi,兩個殭屍之間間隔為d;

每次在隊首新增乙個血量為ai的殭屍,其他殭屍不變;

每關在門前放乙個攻擊力任意的植物,求n關放置植物總攻擊力的最小值;

n<=100000,其他資料<=10^12;

題解:

題意敘述略詭異。。建議還是去看一眼原題;

首先考慮對於每一關的答案,應該是恰好將最難打死的殭屍打死的攻擊力值;

令s[i]為i這個殭屍血量與它前面殭屍血量之和,dis[i]為這個殭屍距房門的距離;

那麼答案就是ans=max(s[i]/dis[i]);

將這個東西視為乙個二維座標系下的點,要求的就是這個點集與原點斜率最大的地方;

這裡我是維護乙個上凸殼來二分(為啥別人都是下凸殼);

二分詳細還是見**吧。。我最近各種姿勢都有些奇怪;

上凸殼的原因似乎比較顯然吧,上凸出來的乙個東西可以是答案而下凹進去的絕對不可能啊;

這樣對於乙個答案的處理就可以做到logn了吧;

但是兩關之間的轉移,如果乙個乙個移動點是o(n)的,就又退化到了暴力;

所以不能移動點,移動座標軸!

然後這題似乎就沒啥說的了,最後一句吐槽,我並不想保護出題人;

**:

#include#include#include#define n 110000

using namespace std;

typedef long long ll;

int st[n],top;

ll x[n],y[n];

double slope(int l,int r)

ans+=slope(0,st[r]);

} printf("%.0lf",ans);

return 0;

}

SDOI2013 BZOJ3203 保護出題人

description input 第一行兩個空格隔開的正整數n和d,分別表示關數和相鄰殭屍間的距離。接下來n行每行兩個空格隔開的正整數,第i 1行為ai和 xi,分別表示相比上一關在殭屍佇列排頭增加血量為ai 點的殭屍,排頭殭屍從距離房子xi公尺處開始接近。output 乙個數,n關植物攻擊力的最...

BZOJ3203 SDOI2013 保護出題人

bzoj luogu 題面不太好簡化就不放了qaq。先對殭屍的血量做乙個字首和,然後在第 i 關中視第 j 只殭屍 j le i 的血量為 a i a 這樣就可以當作是開了穿牆掛,可以一直攻擊每乙隻殭屍直至其死亡。考慮最優策略,一定是某乙隻殭屍在剛好走到門前的時候把他打死。也就是算出打死每乙隻殭屍所...

BZOJ 3203 sdoi 2013 保護出題人

由於樣例解釋很清晰,所以很容易得到以下結論 1 每一關都是獨立的,且殭屍的相對位置不會變 2 每一關的攻擊力 max sum i dis i 其實sum i 是殭屍攻擊力的字首和,dis i 是距離 然後因為輸入是每次在隊頭新增,所以我們可以把字首和轉換成字尾和 攻擊力 max sum i sum ...