洛谷P3299 保护出题人


注意每一关的时候,前一关的植物会消失。保留整数指四舍五入。
解:冷静分析一波,列一个式子出来,发现每一关的植物攻击力要是(ai + ... + aj) / (xi + d * (i - j))的最大值。1 <= j <= i
然后把这个东西写成前缀和,分母的i和j分离:(si - sj-1) / (xi + d * i - d * j))
发现就是两个点(xi + d * i, si)和(d * j, sj-1)之间的斜率。
于是维护一个下凸包然后凸包上三分就行了。注意到插入的点的横坐标单增,单调栈即可。
整数三分,就考虑l + 1 = r的时候怎么取,也比较好写。
#include <bits/stdc++.h> typedef long long LL;
const int N = ;
const double eps = 1e-; struct Vec {
double x, y;
Vec(double X = , double Y = ) {
x = X;
y = Y;
}
inline Vec operator + (const Vec &w) const {
return Vec(x + w.x, y + w.y);
}
inline Vec operator - (const Vec &w) const {
return Vec(x - w.x, y - w.y);
}
inline double operator * (const Vec &w) const {
return x * w.y - y * w.x;
}
};
typedef Vec Poi; Poi node[N];
LL a[N], x[N], sum[N], d;
int n, top, stk[N]; int main() {
scanf("%d%lld", &n, &d);
for(int i = ; i <= n; i++) {
scanf("%lld%lld", &a[i], &x[i]);
sum[i] = sum[i - ] + a[i];
}
double ans = ;
for(int i = ; i <= n; i++) {
Poi now(x[i] + i * d, sum[i]);
node[i] = Poi(i * d, sum[i - ]);
while(top > && (node[stk[top]] - node[stk[top - ]]) * (node[i] - node[stk[top]]) < eps) {
top--;
}
stk[++top] = i;
//printf("stk %d = %d (%lld %lld) \n", top, i, i * d, sum[i - 1]);
//printf("now (%lld %lld) \n", x[i] + i * d, sum[i]);
int l = , r = top;
while(l < r) {
int mid = (l + r) >> ;
int ml = stk[mid], mr = stk[mid + ];
double vl = (double)(sum[i] - sum[ml - ]) / (x[i] + (i - ml) * d),
vr = (double)(sum[i] - sum[mr - ]) / (x[i] + d * (i - mr));
//printf("vl = %lf vr = %lf \n", vl, vr);
//printf("x = %lld y = %lld = %lld + %d * %lld \n", sum[i], x[i] + i * d, x[i], i, d);
if(vl < vr) {
l = mid + ;
}
else {
r = mid;
}
}
ans += (double)(sum[i] - sum[stk[r] - ]) / (x[i] + (i - stk[r]) * d);
//printf("ans += %lf \n", (double)(sum[i] - sum[stk[r] - 1]) / (x[i] + (i - stk[r]) * d));
//printf("r = %d \n", r);
/*for(int j = 1; j <= top; j++) {
printf("%d ", stk[j]);
}
puts("");*/
} printf("%.0f\n", ans);
return ;
}
AC代码
洛谷P3299 保护出题人的更多相关文章
- 洛谷 P3299 [SDOI2013]保护出题人 解题报告
P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...
- 【BZOJ3203】保护出题人(动态规划,斜率优化)
[BZOJ3203]保护出题人(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 在最优情况下,肯定是存在某只僵尸在到达重点的那一瞬间将其打死 我们现在知道了每只僵尸到达终点的时间,因为僵尸要依次打死 ...
- 【BZOJ3203】[Sdoi2013]保护出题人 二分+凸包
[BZOJ3203][Sdoi2013]保护出题人 Description Input 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + ...
- BZOJ3203 保护出题人(defend)
保护出题人(defend) 题目描述 输入 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离. 接下来n行每行两个空格隔开的正整数,第i + 1行为 a i和 x i,分别表示相比上一 ...
- [SDOI2013]保护出题人
题目 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者 ...
- [BZOJ3203] [SDOI2013]保护出题人(二分+凸包)
[BZOJ3203] [SDOI2013]保护出题人(二分+凸包) 题面 题面较长,略 分析 对于第i关,我们算出能够打死前k个个僵尸的最小能力值,再取最大值就可以得到\(y_i\). 前j-1个僵尸 ...
- 【JZOJ3299】【SDOI2013】保护出题人 三分+凸壳
题面 出题人铭铭认为给SDOI2012 出题太可怕了,因为总要被骂,于是他又给SDOI2013 出题了. 参加SDOI2012 的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013 ...
- BZOJ 3203 [SDOI2013]保护出题人 (凸包+三分)
洛谷传送门 题目大意:太长略 每新加入一个僵尸,容易得到方程$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+d(i-j)}}$ 即从头开始每一段僵尸都需要在规定距 ...
- 【洛谷 P3299】 [SDOI2013]保护出题人 (凸包,三分,斜率优化)
题目链接 易得第\(i\)关的最小攻击力为\(\max_{j=1}^i\frac{sum[i]-sum[j-1]}{x+d*(i-j)}\) 十分像一个斜率式,于是看作一个点\(P(x+d*i,sum ...
随机推荐
- 手把手教你接口自动化测试 – SoapUI & Groovy【转】
手把手教你接口自动化测试 – SoapUI & Groovy Posted on 2015-01-21 09:38 WadeXu 阅读(12741) 评论(10) 编辑 收藏 手把手教你接口自 ...
- vue-draggable-resizable 拖拽缩放插件
安装: npm install --save vue-draggable-resizable 使用: <template> <div style="height: 50 ...
- Spring Boot 整合 ActiveMQ
依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...
- 「题解」:windy数
问题: windy数 时间限制: 1 Sec 内存限制: 512 MB 题面 题目描述 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 的正整数被称为 Windy 数. ...
- centos 6.5 安装dotnet core 2.2
.net core 官网地址 https://dotnet.microsoft.com/download 本次安装版本为.net core SDK v2.2.101 1.查看系统版本, 升级系统基本l ...
- 修改cmd命令默认路径
未修改之前: 修改方法: 1.win+r打开运行对话框,输入 regedit 打开注册表编辑器 2.在注册表中找到:HKEY_CURRENT_USER\Software\Microsoft\Comma ...
- Http协议之content
用android 通过http协议提交数据至服务器 content的内容 代码如下: private static JSONObject connUpload(String baseUrl, Map& ...
- Gen8折腾日记
(2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年7月7日,可惜在博客园这边不能修改发布时间.) 放假伊始,老大订购了两台服务器,一台是Dell的R630,用于其他 ...
- apache netbeans不再集成tomcat
老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...
- 2019-8-31-dotnet-启动-JIT-多核心编译提升启动性能
title author date CreateTime categories dotnet 启动 JIT 多核心编译提升启动性能 lindexi 2019-08-31 16:55:58 +0800 ...