我三分这么好吗居然1A啦???提交的时候只是想着先WA一次的。。。。

这题真的很妙啊

首先第一步,就是把僵尸的生命值取一个前缀和,这样造成伤害的时候,可以视为同时对所有僵尸造成伤害。

那么就可以得到一个柿子:

对于第i次进攻,k=max( (sum[i]-sum[j-1]) / x[i]+(i-j)*d ) 其中j表示第j只僵尸。

这样时间的复杂度是O(n^2)的,妥妥的过不去

然后设y1=sum[i],y2=sum[j-1] x1=x[i]+i*d,x2=j*d

柿子就变成了k=(y1-y2)/(x1-x2)这不就是斜率吗

令P(x1,y1),Q(x2,y2)可以发现Q一直是不变的,变的只是P,值得注意的是P的x坐标没有单调性

那么对于Q每次加入用单调栈维护一个下凸包,三分答案出解即可

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;double sum[110000],w[110000];
struct node
{double x,y;
}sta[110000];int top;
double slope(node n1,node n2){return (n1.y-n2.y)/(n1.x-n2.x);}
int main()
{int n;double d;scanf("%d%lf",&n,&d);double ans=0;sum[0]=0;top=0;for(int i=1;i<=n;i++){scanf("%lf%lf",&sum[i],&w[i]);sum[i]+=sum[i-1];node Q;Q.x=double(i)*d,Q.y=sum[i-1];while(top!=0&&slope(sta[top-1],sta[top])>=slope(sta[top],Q))top--;sta[++top]=Q; node P;P.x=w[i]+double(i)*d,P.y=sum[i];int l=1,r=top;while(r-l>3){int mid=(l+r)/2;int mmid=(mid+r)/2;if(slope(P,sta[mid])>slope(P,sta[mmid])){r=mmid-1;}else l=mid+1;}int ip=l;for(int j=l+1;j<=r;j++)if(slope(P,sta[j])>slope(P,sta[ip]))ip=j;ans+=slope(P,sta[ip]);}printf("%.0lf\n",ans);return 0;
} 

转载于:https://www.cnblogs.com/AKCqhzdy/p/8909010.html

bzoj3203: [Sdoi2013]保护出题人相关推荐

  1. [bzoj3203][SDOI2013]保护出题人

    3203: [Sdoi2013]保护出题人 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 389 Solved: 218 [Submit][Status ...

  2. [BZOJ3203][SDOI2013]保护出题人(凸包+三分)

    https://www.cnblogs.com/Skyminer/p/6435544.html 先不要急于转化成几何模型,先把式子化到底再对应到几何图形中去. 1 #include<cstdio ...

  3. bzoj3203 [Sdoi2013]保护出题人 凸包+二分

    一开始以为丧尸可以挡伤害,然后发现这个题目的设定非常** 然后就考虑每个丧尸到门口的时间,由于伤害是继承的,所以前缀和分配 然后答案=Σ(HP前缀和*速度/距离)  设 HP/l=k ,l=x+nd ...

  4. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)

    惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...

  5. BZOJ 3203 Sdoi2013 保护出题人 凸包+三分

    题目大意:太长自己看 令sumi表示第i个僵尸以及之前的僵尸的体力总和.disi表示第i个僵尸与房屋的初始距离 我们发现我们能消灭一个僵尸当且仅当y>=sumidisi 那么我们要求的显然就是m ...

  6. [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)

    多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...

  7. BZOJ 3203 sdoi 2013 保护出题人

    由于样例解释很清晰,所以很容易得到以下结论: 1.每一关都是独立的,且僵尸的相对位置不会变 2.每一关的攻击力=Max(sum(i)/dis(i)) 其实sum(i)是僵尸攻击力的前缀和,dis(i) ...

  8. BAT华为美团头条面试考什么?这份GitHub万星资源,告诉你面试题+答案+出题人分析...

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 2020校招脚步临近,怎样备战即将到来的面试,在众多面试者中脱颖而出惊艳到面试官,化身大厂Offer收割机? GitHub上就有这样一个万星 ...

  9. 牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心

    https://ac.nowcoder.com/acm/contest/358/E 题意: 出题人有两个数组,A,B,请你把两个数组归并起来使得cost=∑i∗ci 最小,归并要求原数组的数的顺序在新 ...

最新文章

  1. 纯数学教程 Page 325 例LXVIII (13)
  2. 挂起和阻塞区别以及sleep和wait的区别
  3. python模块讲解_python模块详解 | filecmp
  4. 我的计算机怎么打不开怎么办理,我的电脑打不开,怎么办【解决方法】
  5. 是不是用博客园编辑器插入修改图片好困难?怀念Word吧,看看用Word2010发博客教程吧~...
  6. 如何有效解决C与C++的相互调用问题
  7. c语言excel转pdf,基于C语言和Excel软件下光速测量仪测量玻璃折射率.pdf
  8. android intent-filter作用,Android中Intent-Filter的匹配规则是什么
  9. springmvc-interceptor(拦截器)
  10. bootstrap datetimepicker 复选可删除,可规定指定日期不可选
  11. 解决在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'
  12. Linux内核编译 —— 配置文件
  13. linux麒麟镜像,银河麒麟、优麒麟的软件源和镜像站
  14. 【软件设计】如何画时序图
  15. [windows内核]长调用与短调用
  16. React Native 0.59.x新特性解读
  17. 关于keil中,while循环条件不成立却无法跳出的问题
  18. 利用相对性原理推导Lorentz变换
  19. unity实现AI对战坦克
  20. 解决NPM下载速度贼慢的方法

热门文章

  1. js计算数组中每个元素出现的次数(2种方法)
  2. [资源]推荐一些Python书籍和教程,入门和进阶的都有!
  3. spring gateway 鉴权_通过spring实现service变成controller,代码得到了简化
  4. 手写springmvc
  5. Jmeter之逻辑控制器(Logic Controller)
  6. py 的 第 30 天
  7. context:component-scan扫描使用的use-default-filters
  8. [Unity3D]unity3d5.0简单的调用摄像头
  9. XML文件读取工具类
  10. linux-tar命令详解