SDOI2013 BZOJ3203 保護出題人

2021-07-07 09:02:56 字數 1567 閱讀 5280

description

input

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

output

乙個數,n關植物攻擊力的最小總和 ,保留到整數。

sample input

5 23 3

1 110 8

4 82 3

sample output

7 hint

第一關:距離房子3公尺處有乙隻血量3點的殭屍,植物最小攻擊力為1.00000; 第二關:距離房子1公尺處有乙隻血量1點的殭屍、3公尺處有血量3點的殭屍,植物最小攻擊力為1.33333; 第三關:距離房子8公尺處有乙隻血量10點的殭屍、10公尺處有血量1點的殭屍、12公尺處有血量3點的殭屍,植物最小攻擊力為1.25000; 第四關:距離房子8公尺處有乙隻血量4點的殭屍、10公尺處有血量10點的殭屍、12公尺處有血量1點的殭屍、14公尺處有血量3點的殭屍,植物最小攻擊力為1.40000; 第五關:距離房子3公尺處有乙隻血量2點的殭屍、5公尺處有血量4點的殭屍、7公尺處有 血量10點的殭屍、9公尺處有血量1點的殭屍、11公尺處有血量3點的殭屍,植物最小攻擊力 為2.28571。 植物攻擊力的最小總和為7.26905。

對於100%的資料, 1≤n≤10^5,1≤d≤10^12,1≤x≤ 10^12,1≤a≤10^12

source

感人至深…最後我竟然沒發現答案是在凸包上所以可以三分t_t

hta的題解

#include

#include

#include

#include

#include

#define maxn 100010

#define eps 1e-20

using

namespace

std;

int n,top;

double d,ans;

double a[maxn],x[maxn];

struct point

;} friend point operator -(point a,point b) ;}

friend

double

operator *(point a,point b)

}sta[maxn];

double slope(point a,point b)

int main()

;sum+=a[i];

while (top>1&&(now-sta[top-1])*(sta[top]-sta[top-1])>=-eps) top--;

sta[++top]=now;now=(point);

int l=1,r=top,mid1,mid2,len;

while (r-l>=3)

for (int j=l;j<=r;j++) maxn=max(maxn,slope(sta[j],now));ans+=maxn;

}printf("%.0f\n",ans);

}

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 ...

SDOI2013 刺客信條

故事發生在1486 年的義大利,ezio 原本只是乙個文藝復興時期的貴族,後來因為家族成員受到聖殿騎士的殺害,決心成為一名刺客。最終,憑藉著他的努力和出眾的天賦,成為了傑出的刺客大師,他不僅是個身手敏捷的武林高手,飛簷走壁擅長各種暗殺術。刺客組織在他的帶領下,為被剝削的平民聲張正義,趕跑了原本統治義...