[BZOJ]3203 [SDOI2013] 保护出题人 三分

图解移动机器人中的运动规划(Motion Planning),附几十种规划算法 运动规划是移动机器人的核心理论和工程技术之一,本文作为教程先导,解析了运动规划的两大组件——路径规划和轨迹规划。欢迎感兴趣的同学订阅专栏! 阅读详情

3203: [Sdoi2013]保护出题人

Time Limit: 3 Sec   Memory Limit: 128 MB
Submit: 885   Solved: 440
[ Submit][ Status][ Discuss]

Description

Input

第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离。接下来n行每行两个空格隔开的正整数,第i + 1行为Ai和 Xi,分别表示相比上一关在僵尸队列排头增加血量为Ai 点的僵尸,排头僵尸从距离房子Xi米处开始接近。 

Output

一个数,n关植物攻击力的最小总和 ,保留到整数。

Sample Input

5 2
3 3
1 1
10 8
4 8
2 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

[ Submit][ Status][ Discuss]


HOME Back

  一开始看错题了以为血量是递增的... 想了个二分做法看样例解释发现不对... 对于第n关, 只需要保证每个僵尸都不会吃到植物. 就是求max((sum[i] - sum[j - 1]) /x[i] + (i - j) * d. 然后拆开就会发现是两点之间的斜率. 那么要求最大斜率肯定就是维护下凸壳. 到定点距离会发现是单峰函数, 三分即可.

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5; 
int n, top;
double sum[maxn], xx[maxn], d;
double tmp, ans;
inline const int read() {
	register int x = 0;
	register char ch = getchar();
	while (ch < '0' || ch > '9') ch = getchar();
	while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
	return x;
}
struct Point{
	double x, y;
	Point() {}
	Point(double x, double y) : x(x), y(y) {}
	inline friend Point operator - (const Point &r, const Point &s) {
		return Point(r.x - s.x, r.y - s.y); 
	}
}pts[maxn], cvx[maxn], q;
typedef Point Vector;
inline double cross(const Vector &r, const Vector &s) {
	return r.x * s.y - r.y * s.x;
}
inline bool onleft(const Point &A, const Point &B, const Point &C) {
	return cross(C - A, B - A) >= 0;
}
inline double slopego(const Point &A, const Point &B) {
	return (B.y - A.y) / (B.x - A.x);
}
inline double check() {
	tmp = 0;
	int lf = 1, rg = top, lmid, rmid;
	while (rg >= lf + 3) {
		lmid = lf + (rg - lf) / 3;
		rmid = rg - (rg - lf) / 3;
		if (slopego(cvx[rmid], q) > slopego(cvx[lmid], q)) lf = lmid;
		else rg = rmid;
	}
	for (int i = lf; i <= rg; ++ i) tmp = max(slopego(cvx[i], q), tmp);
	return tmp;
}
int main() {
	n = read(), d = read();
	for (register int i = 1; i <= n; ++ i) {
		sum[i] = read(), xx[i] = read();
		sum[i] += sum[i - 1];
		pts[i].x = i * d, pts[i].y = sum[i - 1];
	}
	for (register int i = 1; i <= n; ++ i) {
		while(top > 1 && onleft(cvx[top - 1], cvx[top], pts[i])) top --;
		cvx[++ top] = pts[i];
		q.x = xx[i] + i * d, q.y = sum[i];
		ans += check();
	}
	printf("%.0lf\n", ans);
}

 

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优 LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。 阅读详情

相关推荐

Q&A | ZStack替代VMware实问实答

ZStack替代VMware实问实答

zstack_org的博客 1800

[SDOI2013]保护出题人

题目 题解 数据确实水,n2 算法能过1e4就算了,1e5都能过一组,服了 研究题目与样例数据,我们得知一个重要信息,僵尸死了之后,多余的伤害会传到后面去。打死最前面的僵尸才能打后面,僵尸每秒都移动,那么对于第i个僵尸,我们可以将前面的僵尸与i本身绑在一起(生命值之和),求此时需要多少攻击力,即生命值之和除以i离红线的距离 那么我们轻松可以得到f[i] = max(sum[i] - sum[j - 1]) / (d * (i - j) + x[i])。 f[i]表示第i关需要最小攻击力 最后加起来便是答案

ywy 276

【β-Boltzmann探索策略】

𝜀是一个介于0和1之间的参数,用于控制探索和利用的比例。当𝜀较大时,智能体更倾向于探索;当𝜀较小时,智能体更倾向于利用已知信息。

m0_59385870的博客 1083

【SDOI2013】保护出题人(斜率,凸壳)

显然对于第 iii 关的答案为: ansi=max⁡j∈[1,i](si−sj−1xi+(i−j)d) ans_i=\max_{j\in [1,i]}\left(\dfrac{s_i-s_{j-1}}{x_i+(i-j)d}\right) ansi​=j∈[1,i]max​(xi​+(i−j)dsi​−sj−1​​) (其中 si=∑j=1iajs_i=\sum\limits_{j=1}^ia_jsi​=j=1∑i​aj​) 然后把这个看成是 (xi+i⋅d,si)(x_i+i\cdot d,s_i)(xi

ez_lcw的博客 191

SDR实战(五)-AD9361多芯片同步技术详解

本文详细解析了AD9361多芯片同步技术在SDR系统中的实现方法,涵盖硬件连接方案、软件配置流程及同步验证技巧。通过等长时钟走线、低抖动时钟分配和精确的SYNC信号控制,解决MIMO系统中多AD9361芯片的时钟同步难题,提升系统性能与稳定性。

weixin_30952535的博客 761

Qt C++ 实现一个完整的扫雷

mineCountLabel = new QLabel(QString("地雷: %1").arg(remainingMines, 3, 10, QChar('0')), this);mineCountLabel->setText(QString("地雷: %1").arg(remainingMines, 3, 10, QChar('0')));timeLabel->setText(QString("时间: %1").arg(gameTime, 3, 10, QChar('0')));" : "游戏失败!

寒寒豆豆软件公司的博客 107

bzoj-3203 保护出题人

题意: 在一个诡异的植物大战僵尸游戏中,给出n关; 第i关队首僵尸距房门xi,两个僵尸之间间隔为d; 每次在队首添加一个血量为ai的僵尸,其他僵尸不变; 每关在门前放一个攻击力任意的植物,求n关放置植物总攻击力的最小值; n 题解: 题意叙述略诡异。。建议还是去看一眼原题; 首先考虑对于每一关的答案,应该是恰好将最难打死的僵尸打死的攻击力值; 令s[i]为i这个僵尸血量与

140142 1034

HBase批量导入工具:BulkLoad使用详解

HBase作为分布式NoSQL数据库,在大数据领域有着广泛应用。传统的数据写入方式(如Put操作)在面对海量数据导入时存在性能瓶颈。BulkLoad提供了一种高效的大批量数据导入方案,可以显著提高数据加载速度并降低集群负载。BulkLoad的核心原理和架构与传统写入方式的性能对比详细的使用方法和实现步骤性能优化技巧和最佳实践实际应用案例分析本文首先介绍BulkLoad的基本概念和原理,然后深入讲解其实现机制和关键技术。接着通过实际案例演示BulkLoad的使用方法,并分析性能优化策略。

大数据洞察的博客 1236

[bzoj3203][SDOI2013]保护出题人

3203: [Sdoi2013]保护出题人Time Limit: 3 Sec Memory Limit: 128 MB Submit: 389 Solved: 218 [Submit][Status][Discuss] DescriptionInput第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离。接下来n行每行两个空格隔开的正整数,第i + 1行为Ai和 Xi,分别表示

Vampire 1015

2026 Claude Code 标准化前端UI SKILL——Frontend Design

是 Anthropic 官方开源的技能包,在 Claude 官方插件站中排名第一,超过 52k 的下载量。场景推荐方案快速体验批量安装官方 Skills深度设计策略叠加完整打磨流程集成终端跑claude一句话总结:Frontend Design 不是给 AI 加新能力,而是给 AI 加审美标准。它让 AI 从“能画”变成“会设计”——先想清楚风格,再动手写代码。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 3603

基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)

基于NB-IoT技术的城市道路智慧路灯监控系统,在每个照明节点上安装一个集成了NB-IoT模组的单灯控制器,单灯控制器再经运营商的网络,与路灯控制平台实现双向通信,路灯控制平台直接对每个灯进行控制,包括开关灯控制、光照检测、自动调节明暗、电耗分析等操作。

不脱发的程序猿 5万+

【SDOI2013】保护出题人

【SDOI2013】保护出题人 【题目描述】 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了。 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家。而你作为SDOI2013的参赛者,你需要保护出题人铭铭。 僵尸从唯一一条笔直道路接近,你们需要在铭铭的房门前放置植物攻击僵尸,避免僵尸碰到房子。第一关,一只血量为a1点的僵尸从距离

OI技术宅 1034

nuScenes数据集详细介绍

nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍。例如,nuScenes激光雷达的数据格式,点云包含哪几种属性。再比如,sample文件夹和sweeps文件夹下的文件关系,以及是如何在相关json文件中体现的。本文将详细介绍nuScenes数据集的各个部分。

叶子的博客 1万+

[BZOJ3203][SDOI2013][凸包][三分]保护出题人

[Problem Description] [Algorithm] 凸包 三分 [Analysis] 题目看着非常蛋疼,但是只要读懂了题目,题意还是非常简洁明了的。设sum[i]为前i天所有僵尸的血量和。则由题意可得第i天植物塔防的攻击最小值 f[i] = max((s[i] - s[j - 1]) / (x[i] + d * i - d * j)) 1 可以把f[i]看成是(d

gaotianyu1350的专栏 1534

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

题目大意:太长自己看 令sumisum_i表示第ii个僵尸以及之前的僵尸的体力总和,disidis_i表示第ii个僵尸与房屋的初始距离 我们发现我们能消灭一个僵尸当且仅当y>=sumidisiy>=\frac{sum_i}{dis_i} 那么我们要求的显然就是max{sumidisi}max\{\frac{sum_i}{dis_i}\} 我们将一个僵尸抽象成一个点sumidisi\frac{

世界 1999

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[BZOJ3203][凸包][三分]SDOI2013:保护出题人

OJ挂,链自找 由题目的特性可知,我们可以把血量求前缀和,然后视为同时攻击 则每次的yiy_iyi​可以表示为sum[i]−sum[j−1]x[i]−(i−j)∗d(1≤j≤i−1)\frac{sum[i]-sum[j-1]}{x[i]-(i-j)*d}(1\le j\le i-1)x[i]−(i−j)∗dsum[i]−sum[j−1]​(1≤j≤i−1) 直接求就是n2n^2n2 考虑优化,发现...

romiqi 215

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【bzoj3203】[Sdoi2013]保护出题人 凸包+三分法

非常好的题目 山东二轮前几年还是不错的嘛 题解:http://www.cnblogs.com/iwtwiioi/p/4007263.html 前i个僵尸的血量和为sum[i] 那么第i关的攻击力就是 max{(sum[i]-sum[j-1])/(x[i]+i*d-j*d)}(1 考虑一下为什么? 对于第i只僵尸,可以把前面i-1只僵尸的血量合到第i只上,取最大值已经保证了前i-1只僵

Oxer的专栏 874

[BZOJ3203]-[Sdoi2013]保护出题人-凸包+三分

说在前面第一次写三分,比想象的要艰辛啊… 因为这道题是在搜索「三分」的时候发现的,于是直接就看到题解了… 不过看题解的时候快要困的睡着了…看半天半懂不懂的…. 粗略推导了一下之后就开始写了,于是各种小bug= =精神状态差的时候果然要拒绝写题!!!题目BZOJ3203传送门题面懒得打字了=w=,直接粘图岂不美滋滋 输入输出格式输入格式: 第一行两个空格隔开的正整数n和d,分别表示关数和相邻

泉華子的OI足迹 465

BZOJ3203 SDOI2013 保护出题人 凸包+三分法

题意:给定N组询问和D,初始时集合为空,每组询问先向集合的开头插入一个元素xi,然后给出一个数pi,求最小的yi使得\[{y}_{i}\left({p}_{i}+D\left(i-1 \right) \right)\geq {x}_{i}\] 题解:设Si=$\sum\limits_{j = 1}^i{x}_{j}$,显然yi=$max\left \{ \frac{{S}_{i}-{S...

a18700013354的博客 148

Bzoj3203: [Sdoi2013]保护出题人 凸包 + 三分

题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了。 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家。而你作为SDOI2013的参赛者,你需要保护出题人铭铭。 僵尸从唯一一条笔直道路接近,你们需要在铭铭的房门前放置植物攻击僵尸,避免僵尸碰到房子。 第一关,一只血量为 a1a_1a1​ 点的墦尸从距离房子 x1x_1x...

weixin_30539625的博客 198

[BZOJ3203][Sdoi2013]保护出题人(凸包+三分)

先考虑暴力怎么做。 记SiSiS_i表示前iii个僵尸(按照输入顺序)的血量之和。 考虑如何判断在第iii关,植物攻击力为midmidmid是否可行。 容易得出,消灭前iii个僵尸(排头兵为第111个)需要Si−Sj−1midSi−Sj−1mid\frac{S_i-S_{j-1}}{mid}的时间,只要保证在这段时间内僵尸不进房子即可。 也就是说,植物攻击力为midmidmid时,可行的条...

女装的你,如此好看! 288

BZOJ3203 SDOI2013保护出题人(三分)

  给a做一个前缀和,那么现在每次所查询的就是(sn-sk)/(bn+nd-(k+1)d)的最大值。这个式子可以看成是(bn+nd,sn)和((k+1)d,sk)所成直线的斜率。   脑补一条直线不断减小斜率,容易发现可能成为最大值的点一定在下凸壳上。并且凸壳上的点和该点间的斜率变化情况是一个凸函数。于是维护出凸壳,在凸壳上三分即可。 #include<iostream> ...

weixin_30950237的博客 102

[凸包 三分 数形结合] BZOJ 3203 [Sdoi2013]保护出题人

可以发现yi=MAXj<=i{sum[i]−sum[j−1]x[i]+(i−j)∗d}y_i=MAX_{j<=i} \{ {{sum[i]-sum[j-1]} \over {x[i]+(i-j)*d}} \} 这个东西是个斜率的形式 (x[i]+i∗d,sum[i])(x[i]+i*d,sum[i])和(sum[j−1],j∗d)(sum[j-1],j*d) 可以发现斜率最大一定在凸包上

雯舞 432

BZOJ 3203 [SDOI2013]保护出题人 (凸包+三分)

洛谷传送门 题目大意:太长略 每新加入一个僵尸,容易得到方程$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+d(i-j)}}$ 即从头开始每一段僵尸都需要在规定距离内被消灭 展开式子,可得$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+di-dj}}$ 是不是很像斜率的式子= = ----$(y2-y1)/(x2...

weixin_30826095的博客 136

【BZOJ】【P3203】【Sdoi2013】【保护出题人】【题解】【凸包+三分】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3203 i

退役狗的专栏 842
上一篇: [BZOJ]1069 [SCOI2007] 最大土地面积 凸包 + 旋转卡壳
下一篇: [BZOJ]4568 [SCOI2016] 幸运数字 线性基合并
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值