P2440 木材加工

题意

给定N个木头及其长度,要求把这些木头切割成M块长度相同的小段木头(木头有可能有剩余),求小段木头的最大值。

比如:有两木头长度为 11 和 21, 要求切成 6 块, 那么每块最长就为 5。

1≤N≤100000,1≤M≤1000000001 ≤ N ≤ 100000,1 ≤ M ≤ 1000000001≤N≤100000,1≤M≤100000000
原木长度:1到100000000原木长度:1到100000000原木长度:1到100000000

思路

我们没有办法直接根据木块长度,和要切的块数去算最终小木块的长度。
最终小木块的长度只能在 0 到 100000000 之间。
不考虑时间复杂度,我们可以枚举木块长度,判断寻找可行长度的最大值。

但很明显这个问题的答案具有单调性,也就是说我们不用枚举木块长度,可以二分查找。

为什么说有单调性呢?

因为假设当前进行判断的木块长度为X,如果长度X可行,那么最终答案肯定大于等于X,如果X不可行,那么最终答案肯定小于X。
所以我们可以对 0 到 100000000 这个答案区间进行二分查找,准确来说是右边界二分查找,找到满足要求的最大值。

代码

右边界二分(17ms)

#include<bits/stdc++.h>using namespace std;int n,m;
int a[100005];bool check(int x)
{if(x==0)//长度为0肯定可行return true;int ans = 0;//累加当长度为x时,能切成的块数for(int i = 1; i <= n; ++i){ans += a[i]/x;}//大于等于m则表示可行return ans >= m;
}int main()
{cin >> n >> m;for(int i = 1; i <= n; ++i)cin >> a[i];int l = 0;int r = 100000001;//右边界二分while(l<r){int mid = l+(r-l)/2;if(check(mid))//判断mid是否满足要求l = mid+1;elser = mid;}cout << r-1 << endl;return 0;
}

洛谷 P2440 木材加工 (二分答案)相关推荐

  1. 二分答案——洛谷P2440木材加工

    题目描述 问题分析 这个题目是一类典型的二分答案问题,题目中给出我们需要将给定的长度切割成相应的K段,并且保证切割的小段的最大长度,那么我们怎么做呢,必然是在一定的区间枚举出来该切成多少才能满足切成k ...

  2. 洛谷 P2440 木材加工(二分,含边界处理的笔记)

     题目链接: 木材加工 - 洛谷https://www.luogu.com.cn/problem/P2440 非常简单的题目,用left和right控制二分边界,ans一开始是0,每次check到符合 ...

  3. 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路

    在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量有一天他醒来后发现自己居然到了联盟的主城暴风城在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目背景 [题目描述:] 在艾泽拉斯 ...

  4. 洛谷P1873-砍树(二分答案)

    题目描述: 伐木工人米尔科需要砍倒M米长的木材.这是一个对米尔科来说很容易的工作,因为他有一个漂亮的新伐木机,可以像野火一样砍倒森林.不过,米尔科只被允许砍倒单行树木. 米尔科的伐木机工作过程如下:米 ...

  5. 洛谷——P2440 木材加工

    https://www.luogu.org/problem/show?pid=2440#sub 题目背景 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木 ...

  6. 二分答案——木材加工(洛谷 P2440)

    题目选自洛谷P2440 读完题目后应该有个大致思路,看得出来是二分查找的题. 首先我们输入 n 和 k 并且运用二分找到合适的尺寸,而l 必须要足够小,r 必须要足够的大.题中写道数组中的数最大不会超 ...

  7. 洛谷P2240木材加工

    题目链接 洛谷P2240 题目描述 木材厂有 n根原木,现在想把这些木头切割成 k 段长度为l的小段木头(木头有可能有剩余). 当然,我们希望得到的小段木头越长越好,请求出 l的最大值. 木头长度的单 ...

  8. 洛谷P1014 [NOIP1999 普及组] Cantor 表

    现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 代码 import java.util.*; public class Main{pu ...

  9. python输出一个简单的田字格、用函数简化其代码_Solution Method: 洛谷 P1001 A+B Problem(Python 3 基本输入输出方法及代码简化)...

    本文从 洛谷 P1001 A+B Problem 为例,讲一讲 Python 3 在算法竞赛中的一些基本输入输出方法,以及一些利用 Python 3 特性的代码简化 以下为本文将涉及的内容: inpu ...

最新文章

  1. uva 10627 - Infinite Race(数论)
  2. CRM WebClient UI的浏览器打印实现
  3. Android开发日记(六)
  4. 腾讯云数据库 MySQL 8.0 正式上线,性能全面超越官方版本
  5. Python笔记-多线程爬虫实例
  6. 架构师的英文缩写_架构师必备的20个英文缩写!看你知道几个?
  7. 工作中99%能用到的git命令
  8. c++函数返回二维数组_C++ 怎样让函数返回数组
  9. DevExpress GridControl双击获取行内容
  10. R中读取文件,找不到路径问题 No such file or directory
  11. C Sharp进行附合水准路线计算中间点高程简易程序
  12. Deecamp夏令营面试及结营体验
  13. maya中英文对比_maya菜单中英文对照表
  14. 记一次刷票过程的感想
  15. linux的OOM killer
  16. HSV对应不同颜色的灰度空间
  17. 浙大 计算机 设计学 考研科目,2020浙江大学软件工程考研参考书目
  18. 产品经理(20) #PRD产品需求文档
  19. 第二章 Binary Search
  20. div中的img标签多余空白bug解决方案

热门文章

  1. druid1.2.8源码悦读:第五天
  2. 近日onedrive突然消失问题的解决
  3. 贝尔数C语言,bzoj 3501 PA2008 Cliquers Strike Back——贝尔数
  4. Labview文字识别-从训练到识别
  5. 3D,点云分割,不要割个寂寞
  6. 上传ipa到appstore最简洁的方法
  7. 中国医科大学计算机试题,中国医科大学《计算机应用基础》在线作业和参考答案...
  8. 怎么检测计算机硬件好坏,鲁大师如何检测硬件好坏?硬件好坏检测方法介绍
  9. uniapp 微信登录取消授权,以及不等待你做出授权选择就执行方法体
  10. U盘保存文件未完成时拔掉U盘导致数据丢失的解决办法