news 2026/8/16 23:24:26

洛谷 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/8/17 2:31:28

使用 Docker 一键部署 PaddleOCR-VL: 新手保姆级教程

作者&#xff1a;飞桨开发者技术专家 刘力 | 适合人群&#xff1a;刚接触 PaddleOCR-VL Docker部署的同学 | 学习目标&#xff1a;从一台刚装好的 Ubuntu 24.04 开始&#xff0c;完成 Docker 环境准备 → 拉起 PaddleOCR-VL 服务 → 本机用 HTTP 调用 /layout-parsing 接口…

作者头像 李华
网站建设 2026/8/17 19:41:14

论文查重免费工具排行榜:9大平台+每日不限次推荐

论文查重免费工具排行榜&#xff1a;9大平台每日不限次推荐 核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 …

作者头像 李华
网站建设 2026/8/17 13:14:50

论文目录生成工具排名:8大软件+自动更新推荐

论文目录生成工具排名&#xff1a;8大软件自动更新推荐 工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI降重目录生成 20分钟 学术论文 知网/维普/格子达适配 aicheck AI检测目录优化 实时 初稿检查 多平台规则预判 askpaper 学术规范处…

作者头像 李华
网站建设 2026/8/17 7:21:40

Java IDEA学习之路:第十三、十四周课程笔记归纳

IO (位于 java.io 包中) 一、概念 1. 流&#xff1a;数据在内存和其他存储设备传输的通道、管道。【理解】 2. 流的分类&#xff1a;【面试内容】 (1) 按照方向分&#xff1a;[以JVM内存为参照物] a. 输入流&#xff1a;将 [其他存储设备]中数据读入到[JVM内存]中 。->读 b.…

作者头像 李华
网站建设 2026/8/17 22:34:24

PDF 文件为什么打不开?常见原因与解决思路

在日常工作中&#xff0c;PDF 一直被认为是一种最稳定的文档格式&#xff0c;因为它可以在跨系统、跨设备的情况下保持一致的排版和布局&#xff0c;并且几乎所有人都能打开。但在处理 PDF 时&#xff0c;很多人都会遇到相似的问题&#xff0c;比如有些 PDF 文件打不开&#xf…

作者头像 李华