题目链接
易得第\(i\)关的最小攻击力为\(\max_{j=1}^i\frac{sum[i]-sum[j-1]}{x+d*(i-j)}\)
十分像一个斜率式,于是看作一个点\(P(x+d*i,sum[i])\)和点\(Q(d*j,sum[j-1])\)的斜率
于是就是求当前\(i\)的点\(P\)和之前的所有点\(Q\)的最大斜率,显然有最大斜率的点在凸包上而且有单峰。
于是用单调队列维护凸包,在凸包上三分斜率最大值。

#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std;
const int MAXN = 100010;
inline ll read(){ll s = 0;int w = 1;char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); }return s * w;
}
int n, top;
ll d;
ll a[MAXN], x[MAXN], sum[MAXN];
int st[MAXN];
double k(int i, int j){return ((double)sum[i - 1] - sum[j - 1]) / (i * d - j * d);
}
double calc(int i, int j){return ((double)sum[i] - sum[j - 1]) / (x[i] + d * (i - j));
}
double ans;
int main(){n = read(); d = read();for(int i = 1; i <= n; ++i){a[i] = read(); x[i] = read();sum[i] = sum[i - 1] + a[i];}for(int i = 1; i <= n; ++i){while(top > 1 && k(st[top - 1], st[top]) > k(st[top - 1], i)) --top;st[++top] = i;int l = 1, r = top, mid1, mid2, p;while(l != r){p = (r - l + 1) / 3;mid1 = l + p - 1;mid2 = l + p + p - 1;if(mid1 == mid2) break;if(calc(i, st[mid1]) < calc(i, st[mid2])) l = mid1 + 1;else r = mid2 - 1;}ans += max(calc(i, st[l]), calc(i, st[r]));}printf("%.0lf\n", ans);return 0;
}

转载于:https://www.cnblogs.com/Qihoo360/p/10323485.html

【洛谷 P3299】 [SDOI2013]保护出题人 (凸包,三分,斜率优化)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 洛谷P2497:基站建设(splay、斜率优化)

    所谓splay斜率优化dp,就是利用splay和斜率对dp进行优化 (逃) 解析 在斜优的时候,有时我们会发现我们插入的点的横坐标并不单调 这个时候我们就无法利用单调队列维护凸包了 这时,我们就要请出 ...

  7. bzoj3203: [Sdoi2013]保护出题人

    我三分这么好吗居然1A啦???提交的时候只是想着先WA一次的.... 这题真的很妙啊 首先第一步,就是把僵尸的生命值取一个前缀和,这样造成伤害的时候,可以视为同时对所有僵尸造成伤害. 那么就可以得到一 ...

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

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

  9. 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并

    click here~:https://www.luogu.org/problem/P3302 emmm这个题是真的烦 一看题发现这题不是count on a tree的升级版么 如果一点思路没有的话 ...

  10. BZOJ 3203 sdoi 2013 保护出题人

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

最新文章

  1. Attention Model(注意力模型)思想初探
  2. CTOR在区块熵编码中的优点
  3. c executable和c library_双功能超薄Fe-Nx-C单原子催化剂用于同时制备乙烯和芳基氯化物...
  4. POJ 2785 4 Values whose Sum is 0
  5. chmod 777后还是无法写入
  6. Nacos(十一)之NacosSync 介绍
  7. HDU 2222 Keywords Search
  8. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现
  9. Canvas 数学、物理、动画学习笔记一
  10. python 批量提取 mkv 视频文件内嵌 srt 字幕
  11. CAD线型设置:CAD软件中如何加粗曲线?
  12. Snipaste下载安装(使用教程)
  13. 服务器字体放在服务器什么位置,服务器缺少字体如何查看与添加
  14. 《霍比特人2:史矛革之战》BD高清 电影 下载 [中文字幕]
  15. python计算日期间的差值,python 计算时间、日期差值类
  16. 谈一谈800公斤的牛怎么过承重700公斤的桥
  17. Go Cloud项目开源发布:Go语言将成为云端应用开发的首选语言?
  18. 微信小程序学习笔记(1)基础入门
  19. Linux命令之ifconfig命令
  20. YOLO系列论文精读

热门文章

  1. python append和extend_Python中append和extend区别
  2. 2002年4月计算机二级c语言题,全国计算机等级考试二级C语言真题2004年4月
  3. Cost function of Logistic Regression and Neural Network
  4. 二元函数极值问题:最小二乘法
  5. 2020教师计算机考试笔试题,2020年全国教师资格考试信息技术学科知识与能力练习题...
  6. mysql etimedout_Node.js获取请求ETIMEDOUT和ESOCKETTIMEDOUT
  7. tomcat按日期分割日志(官网文档推荐实现)
  8. Activiti开发案例之代码生成工作流图片
  9. springboot(运行原理参考借鉴)
  10. spring 的3种常用的注入方式