【题解】Luogu P11854 [CSP-J2022 山东] 宴会

news/2026/1/14 12:40:16/文章来源:https://www.cnblogs.com/Seqfrel/p/19343835

题意

求一个点,使得数轴上所有点到一个点的距离加上其权值的最大值最小。

思路

三分

当选定点在所有点左侧时,距离最大值较大。

向右移动该点,最大值减小。

在所有点右侧时,最大值也较大。

由此可推测该最大值是一开口向上的单峰函数,在中间某个点取最小。

再思考发现每个点对于选定点的距离加权值函数都是一个 V 字形折线,而所求函数是每个点上所有函数的最大值构成的图像,对每种相交情况分类讨论即可得出目标函数也是一个由折线构成的单峰函数。

三分求解,复杂度 \(O(T \times n\log X)\),其中 \(X\)\(x_i\) 中的最大值。

转化

在选择 \(x_0\) 作为目标点时,\(x_0\) 左侧所有点都相当于向左移动了 \(t_i\),使得距离加大了权值。同理,右侧所有点都相当于向右移动了 \(t_i\)

此时最优的目标点是最小坐标与最大坐标的中点。

因此可以判断 \(x_0\) 在每相邻两个点之间的情况(需要先按坐标排序)。如果该情况下最优点也在这两个点之间,则假设成立。统计出所有成立假设下的最小值。

朴素做法每次重新计算坐标,\(O(n^2)\) 复杂度不可接受。所以要预处理所有点向左移动情况下的前缀最小值和所有点向右移动情况下的后缀最大值。当选定 \(x_0\)\(i\)\(i+1\) 两点之间时,左侧最小坐标一定是 \(i\) 点的前缀最小,右侧最大坐标一定是 \(i+1\) 点的后缀最大。

考虑样例中特殊情况:一些点坐标相等。此时计算出的中点可能会偏移最优点。此时只需要把答案初始值设为坐标点,由于偏移的值不可能更优,自然可以规避错误。

while(T--){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i].p);for(int i=1;i<=n;i++) scanf("%d",&a[i].t);sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){pre[i]=a[i].p-a[i].t;if(i>1) pre[i]=min(pre[i-1],pre[i]);} for(int i=n;i>=1;i--){lst[i]=a[i].p+a[i].t;if(i<n) lst[i]=max(lst[i+1],lst[i]);}double mins=1000000010,tp=a[1].p; for(int i=1;i<n;i++){double mid=(pre[i]+lst[i+1])*1.0/2;if(a[i].p<=mid&&mid<=a[i+1].p){if(mid-pre[i]*1.0<mins){mins=mid-pre[i]*1.0;tp=mid;}}}int q=tp;if(1.0*q==tp) printf("%d\n",q);else printf("%.1lf\n",tp);}

优化

更进一步不难想到,目标点选在向左平移后坐标最小点的左边,和向右平移后坐标最大点的右边一定不优。所以它们在上述算法中必然会贡献最小值和最大值。因此省去遍历,预处理后直接求解即可。

while(T--) {cin>>n;for(int i=1; i<=n; i++) cin>>a[i];maxx=-1000000007,minn=1000000007;for(int i=1; i<=n; i++) {cin>>x;maxx=max(maxx,a[i]+x);minn=min(minn,a[i]-x);}ans=(maxx+minn)/2.0;if(floor(ans)==ans) printf("%d\n",(int)ans);else printf("%.1f\n",ans);}

(代码来自题解)

重题:Codeforces 1730B

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1004829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入Ascend C(四):多算子融合与图级优化实战——构建高性能Attention自定义Kernel

引言 在前三篇文章中&#xff0c;我们系统学习了 Ascend C 的基础语法&#xff08;第一篇&#xff09;、卷积算子实现&#xff08;第二篇&#xff09;和 LayerNorm 优化&#xff08;第三篇&#xff09;。然而&#xff0c;在真实的大模型推理场景中&#xff0c;单个算子的极致优…

【题解】Luogu P5322 [BJOI2019] 排兵布阵

思路 考虑转化为背包问题。将每个玩家视为一组物品,每个城堡的出兵视为一个物品,因为如果要占领该城堡,就要出严格大于对手两倍的兵,所以每个物品的重量为 \(2\times a_i+1\),每个物品的价值为城堡编号。这样题目…

代码源挑战赛 Round 41

代码源挑战赛 Round 41 2025.12.12 A. [R41A]出题组3 link\(Solution:\) 用取模模拟即可。code #include <bits/stdc++.h> #define int long long #define ll long long #define ull unsigned long long #define…

详细介绍:NumPy / pandas 类型选型、内存占用与性能优化

详细介绍:NumPy / pandas 类型选型、内存占用与性能优化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

告别选择困难!2025年远程控制软件场景化终极横评

推荐标题&#xff1a;告别选择困难&#xff01;2025年远程控制软件场景化终极横评 在混合办公成为常态的今天&#xff0c;远程控制软件已从“备用工具”升级为“生产力刚需”。面对市场上众多的选择&#xff0c;你是否也曾迷失在AI推荐、朋友安利和广告轰炸中&#xff1f;本文将…

一种可落地的任务令牌锁机制:设计原理、实战经验与容器化演进

以下是最近遇到的一个需求:同一类任务被部署在多个节点(虚拟机/容器)上,同一时刻只能由一个节点执行,但又必须保证高可用:当前节点宕机后,其它节点能够自动接管。如何简单、稳健、易调试地实现这样的需求? Red…

Flink学习笔记:状态类型和应用

Flink 被广泛应用的原因,除了我们前面提到的对时间以及窗口的应用之外,另一点就是它强大的容错机制,以及对 Exactly Once 的支持。Flink 被广泛应用的原因,除了我们前面提到的对时间以及窗口的应用之外,另一点就是…

[JSK]二叉苹果树

[JSK]二叉苹果树 大意 给定需要保留的树枝数量,求出最多能留住多少苹 果。苹果长在树枝上。 思路 这个题目和选课最大的不同在于其需要累加的贡献在边上,因此我们依旧设 \(f_{u, j}\),则有转移方程如下: \[f_{u, j…

Day 36 官方文档的阅读

浙大疏锦行 官方文档的检索方式&#xff1a;GitHub和官网 官方文档的阅读和使用&#xff1a;要求安装的包和文档为同一个版本 类的关注点&#xff1a; a.实例化所需要的参数 b.普通方法所需要的参数 c.普通方法的返回值 绘图的理解&#xff1a;对底层库的调用 import p…

【题解】Luogu P8137 [ICPC2020 WF] ’S No Problem

题目大意 给定一个无向树。有两个扫雪机可以任意选择出发终止点,可以走回头路。求两个扫雪机遍历整个树所需的最短路程。 解题思路 不妨先考虑只有一个扫雪机的情况。 我们知道,在无向树上从任意一个结点出发,将所有…

青少年编程学习:考级与竞赛如何平衡

青少年编程学习:考级与竞赛如何平衡 家长最关心的三个编程问题 在青少年编程学习过程中,家长常常面临几个核心困惑: 孩子学习编程,参加等级考试是否有必要? 在众多考试中,NCT和GESP应该如何选择? 如何平衡考级准备与竞赛训练,避免顾此失彼? 一、编程考级的价值:以考…

2025 Autel MaxiVCI V150 Wireless Dongle: CAN FD/DOIP for Autel 900 Series Scanners

The Diagnostic Tool Gap: Modern Vehicles Demand Modern Solutions For European and American automotive professionals and car owners, staying ahead of evolving vehicle technology is a daily challenge. To…

【UI Qt】入门笔记

目录 1、Qt 主要版本发展历程 2、各版本详细对比表 3、底层库对比 4、Qt基类 5、举例 6、QApplication与窗口关联 1、Qt 主要版本发展历程 版本 发布年份 主要特点 当前状态 Qt 1 1995 第一个公开版本&#xff0c;仅支持 Unix/X11 已淘汰 Qt 2 1999 引入信号槽…

WSL安装方法

WSL安装方法 【告别双系统,在Windows上无缝运行Linux,并使用GPU】传统双系统(独立安装 Windows + Linux) 优点:直接运行在硬件上,无性能损失。 缺点:每次切换系统都要重启电脑。虚拟机(VMware / VirtualBox) …

Ubuntu环境中LLaMA Factory 的部署与配置—构建大语言模型微调平台 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【题解】Luogu P8269 [USACO22OPEN] Visits S

思路 容易发现题目给出了一张 \(n\) 个点 \(n\) 条边的有向图,联想到基环树。又因为每个点出度均为一所以是内向基环树。 考虑到题目中的“拜访”类似于拓扑排序,冲突仅存在于环上,所以总边权和去掉环上最小的一条边…

2025贵阳公墓/公益公墓top5推荐!贵阳优质生态陵园榜单发布,合规保障与人文关怀兼具的安息之所推荐 - 全局中转站

引言 随着社会文明的进步和殡葬观念的转变,公众对公墓的选择不再仅关注基本功能,更注重资质合规性、生态环境、服务品质及人文关怀。据中国殡葬协会最新行业报告显示,全国城市经营性公墓合规率约为72%,而同时具备公…

【题解】Luogu P2354 [NOI2014] 随机数生成器

题意 题面花里胡哨。直接看到棋盘那一段,告诉我们 \(K=N\times M\),也就是按给定递推式算出前 \(N\times M\) 项,按规定交换 \(1\sim K\) 的递增序列,最后再按顺序填入 \(N \times M\) 的数表。在上面找排序后字典…

基于Django的农场管理系统

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

rsync交叉编译步骤

1. 系统环境 1.1 目标系统环境 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=unknown DISTRIB_TARGET=mediatek/mt7988 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-…