news 2026/4/23 15:47:18

洛谷 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/4/23 14:49:32

FSKV:给嵌入式设备一个“不会失忆的大脑”

FSKV是LuatOS系统专为嵌入式设备设计的键值对&#xff08;Key-Value&#xff09;存储库&#xff0c;其作用是在Flash存储器中持久化存储键值对数据&#xff0c;允许开发者以键值对的形式存储和检索数据&#xff0c;并且这些数据会被持久化存储在Flash存储器上&#xff0c;确保设…

作者头像 李华
网站建设 2026/4/23 14:32:32

Flutter 状态管理终极指南:从 setState 到 Riverpod + AsyncNotifier

一、引言&#xff1a;为什么状态管理是 Flutter 的核心难题&#xff1f;在 Flutter 开发中&#xff0c;“状态”无处不在&#xff1a;用户输入、网络加载、主题切换、购物车数据…… 但如何高效、可维护、可测试地管理状态&#xff0c;一直是开发者最大的挑战。本文将带你系统梳…

作者头像 李华
网站建设 2026/4/22 3:14:35

js逆向-某省特种设备aes加密研究

声明 文仅供学习参考&#xff0c;如有侵权可私信本人删除&#xff0c;请勿用于其他途径&#xff0c;违者后果自负&#xff01; 如果觉得文章对你有所帮助&#xff0c;可以给博主点击关注和收藏哦&#xff01; 网站链接 aHR0cHM6Ly9obnNlaS5jbi9obnRqL21lbnUvMy8xNA参数分析…

作者头像 李华
网站建设 2026/4/23 12:32:53

技术创新周期与行业投资机会

技术创新周期与行业投资机会 关键词:技术创新周期、行业投资机会、创新扩散、技术成熟度曲线、投资策略 摘要:本文深入探讨了技术创新周期与行业投资机会之间的紧密联系。首先介绍了技术创新周期的背景知识,包括其目的、预期读者、文档结构和相关术语。接着阐述了技术创新周…

作者头像 李华
网站建设 2026/4/23 15:37:53

中小企业怎么选平台?高性价比软文发稿平台红榜

在信息爆炸的数字时代&#xff0c;软文营销已成为中小企业提升品牌知名度、获取潜在客户的重要手段。一篇优质的软文&#xff0c;通过合适的媒介平台发布&#xff0c;能以较低成本实现精准触达&#xff0c;带来可观的转化效果。然而&#xff0c;面对市场上琳琅满目的软文发稿平…

作者头像 李华