题解:P8134 [ICPC 2020 WF] Opportunity Cost

news/2025/10/24 17:15:38/文章来源:https://www.cnblogs.com/shawice/p/19163840

思路

先考虑暴力思路,枚举每个手机 \(i\),然后找一个手机 \(j\),满足 \(\max \left(x_{j}-x_{i}, 0\right)+\max \left(y_{j}-y_{i}, 0\right)+\max \left(z_{j}-z_{i}, 0\right)\) 最大。于是就有了暴力枚举手机 \(j\)\(O(n^2)\) 做法,喜提罚时。

接下来考虑优化。不难发现,题目实际上是在求:

\[\min_{1\le i\le n}\{\max _{1 \leq j \leq n}\{\max \left(x_{j}-x_{i}, 0\right)+\max \left(y_{j}-y_{i}, 0\right)+\max \left(z_{j}-z_{i}, 0\right)\}\} \]

而目前的瓶颈在于:

\[\max _{1 \leq j \leq n}\{\max \left(x_{j}-x_{i}, 0\right)+\max \left(y_{j}-y_{i}, 0\right)+\max \left(z_{j}-z_{i}, 0\right)\} \]

我们希望加速找到使得答案最大的 \(j\) 的过程,但仔细想想,发现是不太可能且比较复杂的。于是我们考虑优化这个式子。

显然,对于式子中的每个 \(\max\),其返回值要么为 \(0\),要么大于 \(0\),那么式子中的三个 \(\max\) 就有 \(2^3=8\) 种情况,可以做分类讨论。

首先,对于这 \(8\) 种情况,我们可以用二进制来表示,其数值范围在 \(0\)\(7\)。若第 \(i\) 位(从 \(0\) 开始)为 \(1\),则代表式子中第 \(i+1\)\(\max\) 返回值大于 \(0\),反之等于 \(0\)。为了方便讲述,下面我将用 \(u_i\) 表示第 \(i+1\) 位是否为 \(1\)

然后,对于每种情况,我们需要找到:

\[\max _{1 \leq i \leq n}\{u_{1}\times x_{i}+u_{2}\times y_{i}+u_{3}\times z_{i}\} \]

这样就可以在 \(O(n)\) 的时间内预处理这 \(8\) 种情况,我们用 \(b_j\) 来表示。

最后,枚举每一个手机,代入每种情况,求出每种情况中可以得到的最大贡献,然后更新答案即可。具体来说,就是在找:

\[\min_{1\leq i\le n}\{\max _{0 \leq j \leq 7}\{b_j-\left(u_{1}\times x_{i}+u_{2}\times y_{i}+u_{3}\times z_{i} \right)\}\} \]

可能给一些人带来的疑惑在于,对于一种情况 \(b_j\),假设使其最大的是手机 \(k\),而当前枚举的手机 \(i\) 又满足 \(x_k-x_i<0\)\(y_k-y_i<0,z_k-z_i<0\),这是否会影响正确性?其实是不会的。对于 \(x_k-x_i<0\) 的情况,已经涵盖在 \(u_1=0\) 的情况之中了,而当前情况又算了负数的贡献,自然是不优的,所以不影响答案的正确性。

这样我们就可以在 \(O(n)\) 的时间内求出答案。

代码

#include<bits/stdc++.h>
#define cin_fast ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0)
#define fi first
#define se second
#define in(a) a = read_int()
using namespace std;
typedef long long ll;
const int Size = 1 << 14;
const int N = 2e5 + 5;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f; 
inline int read_int() {int x = 0;char ch = getchar();bool f = 0;while('9' < ch || ch < '0') f |= ch == '-' , ch = getchar();while('0' <= ch && ch <= '9') x = (x << 3) + (x << 1) + ch - '0' , ch = getchar();return f ? -x : x;
}
ll a[N][3] , b[8];
signed main() {//cin_fast;int n;in(n);for(int i = 1 ; i <= n ; i ++) {in(a[i][0]) , in(a[i][1]) , in(a[i][2]);}for(int i = 1 ; i <= n ; i ++) {for(int j = 0 ; j <= 7 ; j ++) {ll h = 0;for(int k = 0 ; k <= 2 ; k ++) {if((1 << k) & j) h += a[i][k];}b[j] = max(b[j] , h);}}ll ans = INF , id;for(int i = 1 ; i <= n ; i ++) {ll now = 0;for(int j = 0 ; j <= 7 ; j ++) {ll h = 0;for(int k = 0 ; k <= 2 ; k ++) {if((1 << k) & j) h += a[i][k];}now = max(now , b[j] - h);}if(ans > now) {ans = now;id = i;}}cout << ans << ' ' << id;return 0;
}

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

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

相关文章

Java多线程梳理

在 Java 中,创建多线程的方式主要有以下几种:继承 Thread 类通过继承 Thread 类并重写 run() 方法来创建线程。 示例代码: class MyThread extends Thread {@Overridepublic void run() {System.out.println("…

QT的事件循环(一)

目录浅议Qt的事件处理机制 一浅议Qt的事件处理机制 二 转载自CSDN系列文章, 原文链接:https://blog.csdn.net/changsheng230/article/details/6085080 浅议Qt的事件处理机制 一 深入了解事件处理系统对于每个学习Qt人…

深入解析:数据结构 之 【图的遍历与最小生成树】(广度优先遍历算法、深度优先遍历算法、Kruskal算法、Prim算法实现)

深入解析:数据结构 之 【图的遍历与最小生成树】(广度优先遍历算法、深度优先遍历算法、Kruskal算法、Prim算法实现)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

完整教程:构建并运行最小 Linux 内核

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

word批量转pdf

方法:使用Microsoft Word批处理宏 批量实现Word转PDF功能,适合办公人员。无需安装额外软件,操作简单,原生支持。 (1)打开任意 Word 文档,按下 Alt + F11 打开 VBA 编辑器(点击“开发工具”,点击“visual Basi…

【SAE出版 | 高届数 | 检索稳定】第七届土木建筑与城市工程国际学术会议(ICCAUE 2025)

第七届土木建筑与城市工程国际学术会议(ICCAUE 2025)将于2025年10月31日-11月2日在中国贵阳召开。【天津大学、中交天津港湾工程研究院有限公司主办!】 【高届数土木会议 | SAE出版,检索稳定!】 第七届土木建筑与…

qcefview库的使用

目录背景运行环境qcefview源码阅读代码目录代码结构列举的通讯方式通讯方式一,widget中的函数通知web页面改变通讯方式二、鼠标拖拽事件通讯方式三、c++中invoke函数响应(两种UrlRequest、QueryRequest)QCefView中定…

解决Qt 不能debug问题

排查思路 1. 工程配置 通过deepseek查询得到编译选项需要+g,如下 CONFIG += debug QMAKE_CXXFLAGS += -g QMAKE_LFLAGS += -g 1.1. 排查系统的gdb文件是哪个,看是不是期望和和编译配置应用的编译器配套 ----如,都使…

2025年项目总延期?这30款项目进度管理软件让我提前交付率85%!

项目总延期是困扰团队效率的常见难题,但选对工具能让交付率提升至85%以上。本文将为您精选30款高效的项目进度管理软件,覆盖从敏捷开发到传统瀑布模型的不同需求。无论是禅道的全流程管控、Jira的敏捷适配性,还是Tr…

2025 年最新护眼灯生产厂家推荐榜:含全光谱智能照明标杆企业及高产能品牌优选指南自然光护眼/全光谱护眼/儿童护眼吸顶灯公司推荐

引言 当下,电子设备普及让人们日均用眼时长远超以往,护眼照明需求急剧攀升,但护眼灯市场乱象却让消费者陷入困境。众多产品仅靠 “护眼” 噱头吸引购买,实际在光谱连续性、防蓝光效果、频闪控制等核心指标上未达健…

Exadata数据库性能异常,备份进程卡住

1、案例概述 某客户有一台Exadata X9M-2,据客户反馈:“晚上20:30分,开始expdp备份,20:32分卡住。同时,在20:30分也发起了RMAN备份,RMAN备份在21:44也卡住。之后,杀掉进程,并重启恢复正常。” 现在,客户希望分…

做本地门户网站 10 年,我靠微擎摆脱了 “客户需求五花八门” 的噩梦

在我们这座三线城市,我经营的 “小城网” 算小有名气 —— 做了 10 年本地门户网站,从最初帮商家挂广告,到后来承接小程序、公众号开发,手里攒了 200 多个本地客户。可这两年,我却越来越怕接客户的电话,不是不想…

2025 年国内吸顶灯源头厂家最新推荐排行榜:聚焦全光谱技术与品质生产,精选优质厂家助力家居照明选购全光谱/中山现代/客厅现代/吊灯吸顶灯公司推荐

引言 当前家居照明市场中,吸顶灯因适配场景广、照明效果稳定成为众多家庭首选,但市场乱象却给消费者选购带来极大困扰。一方面,品牌数量繁杂且质量差距悬殊,部分小厂家使用劣质材料生产,导致产品存在寿命短、光效…

RabbitMQ框架及应用场景

简介 RabbitMQ是一个使用Erlang,基于AMQP协议的MQ组件。 AMQP全称为 Advanced Message Queuing Protocol(高级消息队列协议****),是一个面向消息的中间件传输协议,用于在应用程序之间进行异步消息通信。 AMQP协议…

UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例 - 指南

UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例 - 指南2025-10-24 16:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: …

熟知大模型中mcp概念 --by zk

MCP核心概念解析 什么是MCP:让大模型拥有“手和脚” 大模型本身只有对话和决策能力,没有执行调用工具,获取资源的能力。因此定义一套让大模型调用外部能力的通用协议很重要。MCP(Model Context Protocol)是一套让…

【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案

【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

2025年一体化雨水提升泵站厂家权威推荐榜单:污水提升泵站/一体化污水泵站/一体化雨水泵站源头厂家精选

在市政排水与水资源管理领域,一体化雨水提升泵站已成为现代城市基础设施的核心组成部分,其高效性能直接关系到城市防洪排涝能力与水环境保护质量。 随着全球城市化进程加速,市政排水系统面临前所未有的压力。据最新…

STM32软件I2C读写AT24C64 - 指南

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

bcc

bcc原理从内核中获取数据。 整个工具的核心原理是利用 eBPF 技术,在内核中与块设备 I/O 相关的关键函数上设置探针(Tracepoint),从而在几乎无开销的情况下捕获 I/O 请求的开始和结束时间,计算出延迟,并将结果存入…