当前位置: 首页 > news >正文

洛谷 AT_abc365_c [ABC365C] Transportation Expenses 题解

题目大意

N N N 个人,高桥要给这其中的第 i i i 个人 min ⁡ ( A i , x ) \min(A_i,x) min(Ai,x) 元钱,保证 x ≥ 0 x\ge0 x0

请问在保证高桥给的钱的总数不大于 M M M 的情况下, x x x 的值最大是多少,若 x x x 可以无限大,那么输出 infinite

题目分析

先考虑 x x x 可以无限大的情况:

  • 容易得到高桥给的钱的总数为 ∑ i = 1 n min ⁡ ( x , A i ) \displaystyle\sum^n_{i=1}\min(x,A_i) i=1nmin(x,Ai),由于 x x x 的值无限大,所以上式可以简化为 ∑ i = 1 n A i \displaystyle\sum^n_{i=1}A_i i=1nAi。又因为高桥最多只能给出 M M M 元,所以在 x x x 无限大的时候 ∑ i = 1 n A i \displaystyle\sum^n_{i=1}A_i i=1nAi 是小于等于 M M M 的。

对于其余情况,只需要二分查找即可。

Code

//请不要抄袭代码
//本代码中变量与题目中的不一样,例如大写 M 在这里是小写 m,需要注意
#include <iostream>
#define int long long//不开 long long 见祖宗
using namespace std;
int n, m, arr[200000];
bool chk(int x) {//判断 x 是否小于等于 Mint cnt = 0;for (int i = 0; i < n && cnt <= m/*当当前花费已经大于 M 时就退出*/; ++i) cnt += min(x, arr[i]);return cnt <= m;
}
int findAns(int ma) {//二分函数,这里不推荐函数名写 find,因为有个库函数也叫 findint l = 0, r = ma - 1;//二分的右边界为 A 中的最大值减 1,因为只有此时才能减少花费while (l <= r) {int mid = (l + r) / 2;if (chk(mid)) l = mid + 1;//当当前 x 的值不大于 M 时就更新左边界else r = mid - 1;//反之则更新右边界}return r;//返回答案
}
signed main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;int cnt = 0, ma = 0;for (int i = 0; i < n; ++i) cin >> arr[i], cnt += arr[i], ma = max(ma, arr[i]);//累加数组和,计算数组最大值if (cnt <= m) return cout << "infinite", 0;//若 A 数组元素和小于等于 M 就输出 infinitecout << findAns(ma);return 0;
}

AC 记录

AtCoder 记录
注:由于开了完隐就不展示洛谷 AC 记录了。

相关文章:

  • boost 的lockfree 使用
  • OmniAns丨OPENAIGC开发者大赛高校组AI创作力奖
  • C++远端开发环境手动编译安装(centos7)
  • YOLOv7改进之MAE主干: 超强ConvNeXtV2 升级版结构,当MAE+YOLO卷积高效涨点
  • 7.字符串 Strings
  • PowerDesigner 16.5安装教程 + 轻松解决软件证书过期导致的无法使用问题
  • OpenSource - 开源日历库tui.calendar
  • 音视频入门基础:FLV专题(1)——FLV官方文档下载
  • Visual Studio 2022
  • 408算法题leetcode--第17天
  • 虚幻引擎UE5如何云渲染,教程来了
  • 环形链表的约瑟夫问题
  • Python精选200Tips:176-180
  • 在ESPnet使用Makefile安装PyTorch和相关依赖的详细教程
  • 嵌入式学习--LinuxDay04
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【个人向】《HTTP图解》阅后小结
  • bearychat的java client
  • Docker 笔记(2):Dockerfile
  • dva中组件的懒加载
  • ES6--对象的扩展
  • gops —— Go 程序诊断分析工具
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript的使用你知道几种?(上)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • React-redux的原理以及使用
  • REST架构的思考
  • Shell编程
  • win10下安装mysql5.7
  • 基于遗传算法的优化问题求解
  • 开源SQL-on-Hadoop系统一览
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个JAVA程序员成长之路分享
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​【已解决】npm install​卡主不动的情况
  • #if 1...#endif
  • #数学建模# 线性规划问题的Matlab求解
  • (20)docke容器
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (k8s中)docker netty OOM问题记录
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (转载)Google Chrome调试JS
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net core 的缓存方案
  • .net core 管理用户机密
  • .net core使用ef 6
  • .net Stream篇(六)
  • .net 后台导出excel ,word
  • .Net 路由处理厉害了
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖