abc 374 E (二分答案贪心)

server/2024/10/20 3:42:33/

E题意:
制作产品,有n道工序。
每道工序有两种设备,单价 pi和 qi一天可做 ai和bi的产品。
最终的生产效率是所有工序的产品数量的最小值。
现有 x元,问生产效率的最大值。

随着效率的增大,所需要的钱变多。所以效率和需要的钱之间是单调的。可以二分。
那么问题变成 给定效率 判断所需要的最少的钱 是否小于等于X 。
那么对于给定的效率怎样找到 所 需要的最少的钱
先贪心的想,我们肯定要选择性价比高的机器(用较少的钱做更多的工作).如果刚好这些机器的效率是mid,那么这是最优的。如果效率>mid ,那么就有可能存在将几个a替换为b ,然后效率为MId,花费的更少。
可以枚举替换上去几个b 。(性价比低的那一个不会选很多。然后因为a b 很小,X很大,可以枚举性价比低的次数)
在这里插入图片描述

这个每次check 是接近O(n)的复杂度。

#include <bits/stdc++.h>
using namespace std;
#define int long long
int read()
{int x = 0, f = 1;char ch = getchar();while (!isdigit(ch)){if (ch == '-')f = -1;ch = getchar();}while (isdigit(ch)){x = (x << 1) + (x << 3) + ch - '0';ch = getchar();}return x * f;
}
struct node
{int a, p, b, q; // 产量价格
};
void solve()
{int n, x;cin >> n >> x;vector<node> v(n);for (int i = 0; i < n; i++){cin >> v[i].a >> v[i].p >> v[i].b >> v[i].q;// 性价比 ,让 a 是高性价比的东西double t1 = (1.0 * v[i].a) / (1.0 * v[i].p);double t2 = (1.0 * v[i].b) / (1.0 * v[i].q);if (t1 < t2){swap(v[i].a, v[i].b);swap(v[i].p, v[i].q);}}// 产生mid 的效益,判断花销是否超过xauto check = [&](int mid) -> bool{int ans = 0;for (auto t : v){int sum = 0;int num = (mid + t.a - 1) / t.a;sum = num * t.p;if (mid % t.a == 0){ans += sum;continue;}// 用 b 替换 a ,枚举替换的b 的数量for (int i = 1; i <= 100; i++){int le = mid - i * t.b;int tt = i * t.q;tt += t.p * ((le + t.a - 1) / t.a);sum = min(sum, tt);}ans+=sum;}return ans <= x;};int l = 0, r = 1e9+10;while (l <= r){int mid = l + r >> 1;if (check(mid))l = mid + 1;elser = mid - 1;}cout << l - 1 << "\n";
}
signed main()
{std::cin.tie(nullptr)->sync_with_stdio(false);int t = 1;// cin>>t;while (t--){solve();}return 0;
}

http://www.ppmy.cn/server/128599.html

相关文章

【unity进阶知识10】从零手搓一个UI管理器/UI框架,自带一个提示界面

最终效果 文章目录 最终效果前言UI管理器1、新增UI面板层枚举2、初始化2.1、用代码创建画布2.2、用代码创建UI面板的父物体层2.3、代码添加EventSystem物体 3、ShowPanel显示面板方法4、HidePanel隐藏面板的方法5、CloseUI关闭界面的方法6、UI界面基类 测试调用优化绑定按钮事件…

LLM端侧部署系列 | 手机上运行47B大模型?上交推理框架PowerInfer-2助力AI手机端侧部署

0. 引言 黄梅时节家家雨&#xff0c;青草池塘处处蛙。 有约不来过夜半&#xff0c;闲敲棋子落灯花。 当下&#xff0c;在移动设备上部署大型模型的趋势是愈演愈烈。Google推出了AI Core&#xff0c;使得Gemini Nano可以在智能手机上部署。此外&#xff0c;近期传闻苹果在iOS …

C++并发编程实战—单例模式与线程池实现

线程池 C线程池是一种用于管理和复用线程的机制&#xff0c;它可以提高程序的性能和效率&#xff0c;特别是在处理大量并发任务时。以下是C线程池的具体细节&#xff1a; 一、定义与功能 定义&#xff1a;线程池是一种设计模式&#xff0c;它预先创建并维护一定数量的线程&a…

教程:在Linux上启动、运行、杀掉和管理项目程序

笔记 1. 启动并运行一个项目程序 假设你的项目程序是一个可执行文件 my_project&#xff0c;位于 /data 目录下。 cd /data ./my_project 2. 杀掉一个正在运行的项目程序 首先&#xff0c;找到程序的进程ID (PID)。 ps aux | grep my_project 找到对应的PID&#xff0c;然后…

用HTML5+CSS+JavaScript庆祝国庆

用HTML5CSSJavaScript庆祝国庆 中华人民共和国的国庆日是每年的10月1日。 1949年10月1日&#xff0c;中华人民共和国中央人民政府成立&#xff0c;在首都北京天安门广场举行了开国大典&#xff0c;中央人民政府主席毛泽东庄严宣告中华人民共和国成立&#xff0c;并亲手升起了…

十大时间序列预测模型

目录 1. 自回归模型 原理 核心公式 推导过程: 完整案例 2. 移动平均模型 原理 核心公式 推导过程: 完整案例 3. 自回归移动平均模型 原理 核心公式 推导过程: 完整案例 4. 自回归积分移动平均模型 原理 核心公式 推导过程 完整案例 5. 季节性自回归积分…

Koa学习

Koa 安装与配置 1. 初始化项目 在终端中执行以下命令&#xff1a; # 创建项目文件夹 mkdir koa cd koa# 初始化并安装依赖 npm init -y npm install koa npm install nodemon --save-dev2. 修改 package.json 在 package.json 文件中进行如下修改&#xff1a; {"type…

STL的位图:bitset

引言 在C标准模板库&#xff08;STL&#xff09;中&#xff0c;bitset是一种用于表示固定大小序列的位集合的容器。每个位&#xff08;bit&#xff09;可以被独立地设置或清除&#xff0c;即它可以单独地表示0或1。bitset在处理二进制数据时非常有用&#xff0c;尤其是在需要节…