二分答案 2023山东省赛 Fast and Fat

[P9559 SDCPC2023] Fast and Fat - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:最小值最大,二分答案。

发现对于 w i ≥ w j w_i \ge w_j wiwj时,第 i i i个人速度不变,还是 v i v_i vi,但是第 j j j个人速度会变为 v j − ( w i − w j ) v_j - (w_i - w_j) vj(wiwj)。直接二分答案的话,假设此时为 m i d mid mid,那么速度小于 m i d mid mid的人需要人来带,且速度要至少提到 m i d mid mid才符合要求。

且对于初始速度已经大于 m i d mid mid的来说,可能要带速度小于 m i d mid mid的人,而且大于 m i d mid mid的人要带的人的体重差也要满足一定条件,即要符合 v j − ( w i − w j ) ≥ m i d v_j - (w_i - w_j) \ge mid vj(wiwj)mid,最差情况是 v j − ( w i − w j ) = m i d v_j - (w_i - w_j) = mid vj(wiwj)=mid,进而得到所承受的最大重量为 w i = v j + w j − m i d w_i = v_j + w_j - mid wi=vj+wjmid。此时发现在最大重量中, v j + w j v_j + w_j vj+wj是不变的, v j + w j − m i d v_j + w_j - mid vj+wjmid是单调的。

对于需要两两组合的情况,显示是可能出现经过特定构造可以满足,但是随机分配是不满足的情况,此时还要贪心的进行配对。我们可以复制一份每个人的信息 v , w v,w v,w。对于其中一个按照 v i + w i v_i + w_i vi+wi进行排序,对于另一个按照 w i w_i wi进行排序,这样就贪心的保证:速度大于 m i d mid mid的人可以分配的最大体重的值跟速度小于 m i d mid mid的人的最大体重值相配对,次大依次类推,避免出现浪费 v i + w i v_i + w_i vi+wi w j w_j wj的情况,且如果这样都不行,那么一定不存在可行方案。

代码如下:

void solve() {int n; cin>>n;vector<array<int,2>> a(n); // v wfor(auto &t: a) cin>>t[0]>>t[1];auto b(a);// 按 v + w 进行排序sort(a.begin(), a.end(), [](auto pre, auto suf) {return pre[0] + pre[1] > suf[0] + suf[1];});// 按 w 进行排序sort(b.begin(), b.end(), [](auto pre, auto suf) {return pre[1] > suf[1];});// pre为速度大于mid的,suf是速度小于mid// 得到pre可以带的最大体重,suf的体重,进行配对auto check = [&](int mid) -> bool {vector<int> pre, suf;for(int i = 0; i < n; ++i) {if(a[i][0] >= mid) pre.push_back(a[i][0] + a[i][1] - mid);if(b[i][0] < mid) suf.push_back(b[i][1]);}// 如果小于mid的人的数量大于速度大于mid的,那么一定不可以if(suf.size() > pre.size()) return false;int m = suf.size();for(int i = 0; i < m; ++i) {// 如果速度大于mid的人能带的最大体重小于速度小于mid的体重,那么就不行if(suf[i] > pre[i]) return false;}return true;};// 最小值最大int l = 0, r = 1e9;while(l < r) {int mid = l + r + 1 >> 1;if(check(mid)) l = mid;else r = mid - 1;}cout<<l<<'\n';
}

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

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

相关文章

【专题】【数列极限】

【整体思路】 【常用不等式】

【Python-随笔】使用Python实现屏幕截图

使用Python实现屏幕截图 环境配置 下载pyautogui包 pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/下载OpenCV包 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/下载PyQT5包 pip install PyQt5 -i https://pypi.tuna.tsi…

目标检测算法改进系列之添加SCConv空间和通道重构卷积

SCConv-空间和通道重构卷积 SCConv&#xff08;空间和通道重构卷积&#xff09;的高效卷积模块&#xff0c;以减少卷积神经网络&#xff08;CNN&#xff09;中的空间和通道冗余。SCConv旨在通过优化特征提取过程&#xff0c;减少计算资源消耗并提高网络性能。该模块包括两个单…

【LangChain实战】开源模型学习(1)-ChatGLM2-6B

介绍 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&#xff1a; 更强大的性能&#xff1a;基于 ChatGLM 初代模型的开发经验&#xff0c…

《python每天一小段》--(1)与GPT-3.5-turbo 模型进行对话

对话如图&#xff1a; 配置环境变量 APIKey如何获得这边不做说明 在Windows操作系统中&#xff0c;你可以按照以下步骤设置环境变量&#xff1a; 打开“控制面板”。在控制面板中&#xff0c;选择“系统和安全”。选择“系统”。在系统窗口中&#xff0c;选择“高级系统设置”…

了解ThreadLocal的原理吗

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

麒麟系统自定义服务-开机自启-配置方案

方法一 &#xff1a;使用systemd的service文件自定义开机启动服务 一、kylin 添加自定义脚本服务说明 在kylin 下&#xff0c;使用管理unit的方式来控制开机自启动服务和添加自定义脚本服务。在/usr/lib/systemd/system目录下包含了各种unit文件&#xff0c;有service后缀的服…

【云原生Prometheus篇】Prometheus PromQL语句详解 1.0

文章目录 一、前言1.1 Prometheus的时间序列1.1.1 指标名称1.1.2 标签1.1.3 使用的注意事项 1.2 样本数据格式1.3 Prometheus 的聚合函数 二 、PromQL 理论部分2.1 PromQL简介2.2 PromQL的数据类型2.3 时间序列选择器2.3.1 瞬时向量选择器 &#xff08;Instant Vector Selector…

vue 前端实现login页登陆 验证码

实现效果 // template <el-form :model"loginForm" :rules"fieldRules" ref"loginForm" label-position"left" label-width"0px" class"login-container"><span class"tool-bar"></sp…

不平衡数据处理

机器学习中一个常见的问题是数据不平衡&#xff0c;其中一个类的数量明显超过其他类&#xff0c;这可能导致有偏见的模型和较差的泛化。实践中可以通过各种Python库来帮助有效地处理不平衡数据。 1、imbalanced-learn imbalanced-learn是scikit-learn的扩展&#xff0c;提供了…

【动态规划】LeetCode-面试题 17.16. 按摩师

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

网络攻击有什么危害,该如何防御

随着互联网的发展&#xff0c;网络安全成为大家关注的焦点。为了确保网络安全&#xff0c;我们需要采取一系列的防护措施。以下是几种常见的网络安全防护措施。 网络安全攻击的主要方式 垃圾邮件和钓鱼攻击&#xff1a;攻击者通过向用户发送大量的垃圾邮件或伪装成合法公司或…

软件工程单选多选补充

2. 4. 5. 6. 7. 8. 9. 10. 12。 13.

〖大前端 - 基础入门三大核心之JS篇㊻〗- JS + CSS实现动画

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

[Rust] 可迭代类型, 迭代器, 如何正确的创建自定义可迭代类型

在 Rust 中, for 语句的执行依赖于类型对于 IntoIterator 的实现, 如果某类型实现了这个 trait, 那么它就可以直接使用 for 进行循环. 直接实现 在 Rust 中, 如果一个类型实现了 Iterator, 那么它会被同时实现 IntoIterator, 具体逻辑是返回自身, 因为自身就是迭代器. 但是如…

MDETR 论文翻译及理解

题目Abstract1. Introduction2. Method2.1. Background2.2. MDETR2.2.1 Architecture2.2.2 Training 3. Experiments3.1. Pre-training Modulated Detection 预训练调制检测3.2. Downstream Tasks3.2.1 Few-shot transfer for long-tailed detection 4. Related work5. Conclus…

web前端之JavaScrip中的闭包

MENU 闭包--笔试-11defineReactive函数&#xff0c;利用闭包封装Object.defineProperty()闭包--节流函数--笔试-10闭包的定义JavaScript闭包的9大经典使用场景 闭包–笔试-11 function fun() { var n 9; // js 中强行给一个未声明的变量赋值&#xff0c;// 程序不会报错// 并…

程序员养生指南

1. 引言 程序员的工作环境通常是长时间坐在电脑前&#xff0c;面临着工作压力和紧张的项目期限。这种工作方式可能导致身体和心理健康问题。为了应对这些挑战&#xff0c;养生对程序员来说至关重要。 2. 坐姿与体态 正确的坐姿和体态对于减轻颈椎、腰椎和手腕的压力至关重要…

微机原理——定时器8253(8254)学习1

目录 定时类型 8253内部结构框图 8253命令字 六种工作方式及输出波形 计数初值的计算与装入 8253的初始化 定时类型 可编程定时器8253&#xff1a;&#xff08;内部采用的是16位 减法计数器&#xff09; 8253内部结构框图 8253命令字 8253有三个命令字&#xff1a;方式命…

HGNN+笔记

1.Title HGNN: General Hypergraph Neural Networks&#xff08;Yue Gao; Yifan Feng; Shuyi Ji; Rongrong Ji&#xff09;【IEEE Transactions on Pattern Analysis and Machine Intelligence 2023】 2.Conclusion This paper extend the original conference version HGNN,…