news 2026/7/7 8:32:40

洛谷 P2440 木材加工 二分解法 经典二分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P2440 木材加工 二分解法 经典二分

题目背景

要保护环境。

题目描述

木材厂有 n 根原木,现在想把这些木头切割成 k 段长度为 l 的小段木头(木头有可能有剩余)。

当然,我们希望得到的小段木头越长越好,请求出 l 的最大值。

木头长度的单位是 cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。

例如有两根原木长度分别为 11 和 21,要求切割成等长的 6 段,很明显能切割出来的小段木头长度最长为 5。

输入格式

第一行是两个正整数 n,k,分别表示原木的数量,需要得到的小段的数量。

接下来 n 行,每行一个正整数 Li​,表示一根原木的长度。

输出格式

仅一行,即 l 的最大值。

如果连 1cm 长的小段都切不出来,输出0

输入输出样例

输入 #1复制

3 7 232 124 456

输出 #1复制

114

说明/提示

数据规模与约定

对于 100% 的数据,有 1≤n≤105,1≤k≤108,1≤Li​≤108(i∈[1,n])。

思路:

这是一道经典的可以用二分解决的题。我们可以考虑从1到1e8(也就是1*10^8,题目给的木头最长长度)的范围找答案,那这么大的数据很明显需要一种思路来优化一下一般的n^2的暴力查找,那么就可以想到二分,我们可以用l和r做边界,l=1,r=1e8,用 (r+l)/2=mid 做二分答案的中间值,用while(l<=r)的循环通过不断调整mid的值,用mid值作为可以切割的长度,在while循环中开个1到n的for循环,让每个完整的木头与mid整除,得到符合长度要求的木头,用cnt累加。如果cnt(当前mid值下可以切割得到满足要求的木头数或者大于,那么我们就让l=mid+1来让长度尽可能的大,反之),找到满足条件的最大切割长度 。

主播的代码:

#include <iostream> #include<queue> #include<algorithm> #include<map> #include<vector> #include<set> #include<stack> #include<string> #include<math.h> #include <iomanip> #include<unordered_map> #include <unordered_set> #include<array> #define gets(S) fgets(S,sizeof(S),stdin) #define ll long long const ll N = 1e6 + 5; const ll Max = 0x3f3f3f3f; using namespace std; ll n, m; vector<ll>saki; ll ef(ll l, ll r) { ll mid = 0, cnt = 0, ans = 0; while (l <= r) { mid = (r + l) / 2; for (int i = 1; i <= n; i++) { cnt += saki[i] / mid; } if (cnt < m) { r = mid - 1; } else { l = mid + 1; } cnt = 0; } return r; } int main() { cin >> n >> m; saki.resize(n + 1); for (int i = 1; i <= n; i++) { cin >> saki[i]; } ll l = 1, r = 1e8; cout << ef(l, r) << endl; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 5:42:20

海外仓如何应对东南亚查仓?合规把控让商品零被扣风险

最近东南亚似乎不太平——从泰国仓库被突袭、百万件商品被扣&#xff0c;到马来西亚一次性查获70多万件中国电子烟&#xff0c;越南芒市7月也查获短短几个月4.7万余件违规货物&#xff0c;一波接一波的监管行动&#xff0c;让不少同行一夜之间陷入破产危机&#xff0c;真是让我…

作者头像 李华
网站建设 2026/7/7 15:46:29

数字孪生平台厂商盘点:这6个玩家的技术路径/产品核心/市场格局解读

数字孪生&#xff0c;作为实现物理世界与数字空间实时交互、仿真优化的关键技术&#xff0c;正成为驱动工业制造、智慧城市、基础设施管理等行业数字化转型的核心引擎。其通过数据集成、模型构建与仿真分析&#xff0c;为预测性维护、流程优化和智能决策提供了前所未有的可能性…

作者头像 李华
网站建设 2026/7/7 8:22:01

再也不靠人肉找合同“坑“:我的智能合同风险审查全流程落地实录

作者&#xff1a;飞桨启航计划学员刘京宗 | 还在为了一份几十页的合同&#xff0c;熬夜逐条对照、担心漏掉关键条款吗&#xff1f; 在大模型时代&#xff0c;这件事不该再靠人力硬扛。 PactGuard-ERNIE-PP 是我在实践中打造的一套「智能合同审查与风险分析系统」。它并不是一…

作者头像 李华
网站建设 2026/7/7 6:52:09

GitCode项目创建分支并提交代码

网上的合作项目&#xff0c;创建自己的分支。确认本地仓库状态&#xff08;先看当前分支、修改内容&#xff09;&#xff1a;# 查看关联 git remote -v # 查看当前分支 git branch # 查看本地修改&#xff08;确认要备份的内容&#xff09; git status # 提交本地所有修改&…

作者头像 李华
网站建设 2026/7/6 19:02:59

GitCode克隆输入账号密码后报错

使用各种ide工具克隆GitCode代码的时候&#xff0c;例如这里使用Trae&#xff0c;会提示需要输入账号密码&#xff0c;但正确输入后&#xff0c;会提示错误。这个报错核心是 GitCode 已经停用了 “账号密码” 的 HTTP 认证方式&#xff0c;要求改用个人访问令牌&#xff08;Per…

作者头像 李华