[USACO23FEB] Bakery S
题目描述
Bessie 开了一家面包店!
在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。
( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间限制,Bessie 一次只能生产一种糕点,所以要生产 A A A 块饼干和 B B B 块松饼,需要 A ⋅ t C + B ⋅ t M A\cdot t_C+B\cdot t_M A⋅tC+B⋅tM 单位的时间。
Bessie的 N ( 1 ≤ N ≤ 100 ) N (1\le N\le 100) N(1≤N≤100) 朋友都想一个一个地去面包店。第 i i i 个朋友一进门就会点 a i ( 1 ≤ a i ≤ 10 9 ) a_i(1 \le a_i \le 10^9) ai(1≤ai≤109) 块饼干和 b i ( 1 ≤ b i ≤ 10 9 ) b_i(1 \le b_i \le 10^9) bi(1≤bi≤109) 块松饼。Bessie 没有空间来储存糕点,所以她只有在接到订单后才开始制作糕点。此外,Bessie 的朋友都很忙,所以第 i i i 个朋友只愿意等 c i ( a i + b i ≤ c i ≤ 2 ⋅ 10 18 ) c_i(a_i+b_i \le c_i \le 2 \cdot 10^{18}) ci(ai+bi≤ci≤2⋅1018) 个单位的时间,然后就伤心地离开。
Bessie 真的不希望她的朋友们伤心,她可以用一块钱升级她的烤箱,让它少花一个单位的时间来生产一块饼干或少花一个单位的时间来生产一个松饼。她不能将她的烤箱升级到花费小于等于 0 0 0 的时间,但她可以选择在她的朋友到来之前将她的烤箱升级多少次,只要生产一块饼干和生产一个松饼所需的时间都严格保持为正数。
对于每一个 T ( 1 ≤ T ≤ 100 ) T(1\le T\le 100) T(1≤T≤100) 的测试案例,请帮助 Bessie 找出她必须花费的最小的钱数量,以便她的面包店能够满足所有的朋友。
输入格式
第一行包含 T T T,测试案例的数量。
每个测试用例都以一行开始,包含 N N N, t C t_C tC, t M t_M tM。然后,接下来的 N N N 行各包含三个整数 a i , b i , c i a_i,b_i,c_i ai,bi,ci。
测试案例用换行符隔开。
输出格式
Bessie 需要为每个测试案例花费的最少钱数,每行一个。
样例解释 1
在第一个测试案例中,贝西可以支付 11 11 11 元来减少 4 4 4 单位生产一块饼干所需的 时间和 7 7 7 单位生产一块松饼所需的时间,从而使她的烤箱在 3 3 3 单位的时间内生产饼干,在 2 2 2 单位的时间内生产松饼。那么她可以在 18 18 18 单位的时间内满足第一个朋友,在 14 14 14 单位的时间内满足第二个朋友,在 5 5 5 单位的时间内满足第三个朋友,所以他们都不会伤心而离开。
在第二个测试案例中,贝西应该把生产一块饼干的时间减少 6 6 6 单位,把生产一块松饼的时间减少 0 0 0 单位。
数据规模与约定
- 输入 2 − 4 2-4 2−4: N ≤ 10 , t C , t M ≤ 1000 N\le 10,t_C,t_M \le 1000 N≤10,tC,tM≤1000
- 输入 5 − 11 5-11 5−11,没有额外的约束。
输入 1
23 7 9
4 3 18
2 4 19
1 1 65 7 3
5 9 45
5 2 31
6 4 28
4 1 8
5 2 22
输出 1
11
6
解析
错误想法:读完题考虑到如果饼干机升级 k k k 次满足答案,那么 k − 1 k-1 k−1 肯定也满足,所以最开始就想着对饼干机的速度进行二分答案,然后算出面包机的最小升级次数,然后对答案取 m i n min min,WA了,原因是题目要求是两个机器升级次数的和最少,因此对于单单一个机器二分答案,得到的两者升级次数并不具有单调性,因此不正确。
正确想法:设饼干机和面包机的速率分别为 x , y x,y x,y,可以发现二分 x + y x+y x+y 是单调的,因为题目要求速度不能减少为 0 0 0,因此 x + y x+y x+y 最小值为 2 2 2,最大值为 t x + t y tx+ty tx+ty,也就是我们二分的左右边界,现在问题是 check 函数怎么验证合法性?
对于任意的 i i i,都需要满足 a x + b y ≤ c ax+by\leq c ax+by≤c,等价于 a x − b x ≤ c − b x − b y ax-bx\leq c-bx-by ax−bx≤c−bx−by,再等价于 ( a − b ) x ≤ c − b ( x + y ) (a-b)x\leq c-b(x+y) (a−b)x≤c−b(x+y),而自己 x + y x+y x+y 又刚好是我们二分的值,因此未知数只有一个 x x x,因为是不等式,所以我们需要考虑 ( a − b ) (a-b) (a−b) 的正负性。
- 如果 a > b a>b a>b,那么 x ≤ ( c − b ( x + y ) ) / ( a − b ) x\leq (c-b(x+y))/(a-b) x≤(c−b(x+y))/(a−b),因为要求速度为正整数,因此需要向下取整。
- 如果 a < b a<b a<b,那么 x ≥ ( c − b ( x + y ) ) / ( a − b ) x\geq (c-b(x+y))/(a-b) x≥(c−b(x+y))/(a−b),因为要求速度为正整数,因此需要向上取整。
- 如果 a = = b a==b a==b,那么左边式子为 0 0 0,仅需要满足右边式子大于等于 0 0 0 即可满足不等式,如果右边式子小于 0 0 0,那么表示不合法。
遍历完之后我们可以得到 x x x 的左右取值范围 x l , x r x_l,x_r xl,xr,怎么证明解合法呢,需要满足以下条件。
- 因为题目要求速度不能少于 1 1 1,因此 x x x 最小为 1 1 1,最大不超过 x + y − 1 x+y-1 x+y−1。
- 左边界肯定得小于等于右边界,因此 x l ≤ x r x_l\leq x_r xl≤xr。
- 右边界不能低于 1 1 1,左边界不能高于 t x tx tx,因此 x r ≥ 1 x_r \geq 1 xr≥1, x l ≤ t x x_l \leq tx xl≤tx。
- 我们的对象都是饼干机 x x x,但同时也需要满足面包机 y y y 也要合法,因此需要满足 x + y − x r ≤ t y x+y-x_r\leq ty x+y−xr≤ty。
此时我们就完成了 check 函数的验证,二分求出 x + y x+y x+y 的最大值就可以获得最小花费。
代码实现
//#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define pi acos(-1)
const int N = 1e6 + 5, mod = 1e9 + 7;
typedef long long ll;
typedef pair<int, int> PII;
ll n, tx, ty, a[N], b[N], c[N];
bool check(ll sum) {//x + y的速度ll x_l = 1, x_r = sum - 1;for (int i = 1; i <= n; i++) {if (a[i] > b[i]) x_r = min(x_r, (c[i] - b[i] * sum) / (a[i] - b[i]));else if (a[i] < b[i]) x_l = max(x_l, (ll)ceil((c[i] * 1.0 - b[i] * sum) / (a[i] - b[i])));else if (c[i] - b[i] * sum < 0) return false;}if (x_l > x_r || x_r < 1 || x_l > tx || sum - x_r > ty) return false;return true;
}
void solve()
{scanf("%lld%lld%lld", &n, &tx, &ty);for (int i = 1; i <= n; i++) scanf("%lld%lld%lld", &a[i], &b[i], &c[i]);ll l = 2, r = tx + ty, ans = -1;while (l <= r) {ll mid = l + r >> 1;if (check(mid)) ans = mid, l = mid + 1;else r = mid - 1;}printf("%lld\n", tx + ty - ans);
}
int main()
{// freopen("input.txt","r",stdin);// freopen("output.txt","w",stdout);int t = 1;scanf("%d", &t);while (t--) solve();return 0;
}
相关文章:
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...

WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...

AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...

JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...