bzoj3203: [Sdoi2013]保护出题人
我三分这么好吗居然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]保护出题人相关推荐
- [bzoj3203][SDOI2013]保护出题人
3203: [Sdoi2013]保护出题人 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 389 Solved: 218 [Submit][Status ...
- [BZOJ3203][SDOI2013]保护出题人(凸包+三分)
https://www.cnblogs.com/Skyminer/p/6435544.html 先不要急于转化成几何模型,先把式子化到底再对应到几何图形中去. 1 #include<cstdio ...
- bzoj3203 [Sdoi2013]保护出题人 凸包+二分
一开始以为丧尸可以挡伤害,然后发现这个题目的设定非常** 然后就考虑每个丧尸到门口的时间,由于伤害是继承的,所以前缀和分配 然后答案=Σ(HP前缀和*速度/距离) 设 HP/l=k ,l=x+nd ...
- BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)
惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...
- BZOJ 3203 Sdoi2013 保护出题人 凸包+三分
题目大意:太长自己看 令sumi表示第i个僵尸以及之前的僵尸的体力总和.disi表示第i个僵尸与房屋的初始距离 我们发现我们能消灭一个僵尸当且仅当y>=sumidisi 那么我们要求的显然就是m ...
- [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...
- BZOJ 3203 sdoi 2013 保护出题人
由于样例解释很清晰,所以很容易得到以下结论: 1.每一关都是独立的,且僵尸的相对位置不会变 2.每一关的攻击力=Max(sum(i)/dis(i)) 其实sum(i)是僵尸攻击力的前缀和,dis(i) ...
- BAT华为美团头条面试考什么?这份GitHub万星资源,告诉你面试题+答案+出题人分析...
铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 2020校招脚步临近,怎样备战即将到来的面试,在众多面试者中脱颖而出惊艳到面试官,化身大厂Offer收割机? GitHub上就有这样一个万星 ...
- 牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心
https://ac.nowcoder.com/acm/contest/358/E 题意: 出题人有两个数组,A,B,请你把两个数组归并起来使得cost=∑i∗ci 最小,归并要求原数组的数的顺序在新 ...
最新文章
- 纯数学教程 Page 325 例LXVIII (13)
- 挂起和阻塞区别以及sleep和wait的区别
- python模块讲解_python模块详解 | filecmp
- 我的计算机怎么打不开怎么办理,我的电脑打不开,怎么办【解决方法】
- 是不是用博客园编辑器插入修改图片好困难?怀念Word吧,看看用Word2010发博客教程吧~...
- 如何有效解决C与C++的相互调用问题
- c语言excel转pdf,基于C语言和Excel软件下光速测量仪测量玻璃折射率.pdf
- android intent-filter作用,Android中Intent-Filter的匹配规则是什么
- springmvc-interceptor(拦截器)
- bootstrap datetimepicker 复选可删除,可规定指定日期不可选
- 解决在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'
- Linux内核编译 —— 配置文件
- linux麒麟镜像,银河麒麟、优麒麟的软件源和镜像站
- 【软件设计】如何画时序图
- [windows内核]长调用与短调用
- React Native 0.59.x新特性解读
- 关于keil中,while循环条件不成立却无法跳出的问题
- 利用相对性原理推导Lorentz变换
- unity实现AI对战坦克
- 解决NPM下载速度贼慢的方法
热门文章
- js计算数组中每个元素出现的次数(2种方法)
- [资源]推荐一些Python书籍和教程,入门和进阶的都有!
- spring gateway 鉴权_通过spring实现service变成controller,代码得到了简化
- 手写springmvc
- Jmeter之逻辑控制器(Logic Controller)
- py 的 第 30 天
- context:component-scan扫描使用的use-default-filters
- [Unity3D]unity3d5.0简单的调用摄像头
- XML文件读取工具类
- linux-tar命令详解