news 2026/5/31 7:23:10

洛谷 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/5/30 0:04:55

英文论文写作工具推荐:8大AI+翻译润色排名+

英文论文写作工具推荐&#xff1a;8大AI翻译润色排名 &#xfffd;&#xfffd; 8款英文论文AI写作工具核心对比 工具名称 核心功能 处理速度 适合场景 独特优势 aibiye 降AIGC率查重 20分钟 学术论文优化 适配知网/维普检测规则 aicheck AIGC检测降重 20分钟 AI…

作者头像 李华
网站建设 2026/5/28 20:55:51

免费论文生成工具排名:8大网站+无水印下载推荐

免费论文生成工具排名&#xff1a;8大网站无水印下载推荐 核心工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI论文生成降重 15-30分钟 初稿快速生成 学术术语精准匹配 aicheck AIGC检测降AI率 20分钟 论文合规性优化 知网/维普规则适配 …

作者头像 李华
网站建设 2026/5/28 12:59:29

XSS(跨站脚本攻击)

XSS&#xff08;跨站脚本攻击&#xff09; 什么是XSS&#xff1f; XSS&#xff08;Cross-Site Scripting&#xff09; 是一种Web安全漏洞&#xff0c;攻击者将恶意脚本注入到其他用户会访问的网页中。 当用户浏览被感染的网页时&#xff0c;恶意脚本会在用户浏览器中执行&…

作者头像 李华
网站建设 2026/5/30 17:49:50

强制式双卧轴搅拌机:型号谱系、核心参数与性能深度剖析!

在混凝土工程领域&#xff0c;强制式双卧轴搅拌机凭借其高效、均匀的搅拌性能&#xff0c;已成为商混站、预制构件厂及大型基建项目的核心设备。小编从行业标准出发&#xff0c;结合工程实践数据&#xff0c;系统梳理双卧轴搅拌机的型号分类、关键参数及性能优化方向&#xff0…

作者头像 李华
网站建设 2026/5/28 6:33:17

信捷XDPLC十轴及以下万能通用程序模板:进制的巧妙运用

信捷XDPLC十轴(包含)及以下万能通用程序模板&#xff0c;用进制在自动化控制领域&#xff0c;信捷XDPLC的应用十分广泛。今天咱就来聊聊基于进制思维打造的信捷XDPLC十轴及以下万能通用程序模板&#xff0c;绝对能给你的PLC编程工作带来不少便利。 一、进制在PLC编程中的重要性…

作者头像 李华