题目选自洛谷P2440

读完题目后应该有个大致思路,看得出来是二分查找的题。

首先我们输入 n 和 k 并且运用二分找到合适的尺寸,而l 必须要足够小,r 必须要足够的大。题中写道数组中的数最大不会超过 100000000 ,所以我们设 100000001 就可以了。

现在就走到了判断的环节,我们如何判断 mid 是太小还是太大呢?我们需要编写一个新函数 --------check。

在函数 check中,我们依次要判断 a 中的每一个数并计算出能切出多少个 mid ,还要用一个变量 num 储存他们,如果 num 分的分数比 k 多或者正好等于,返回真。如果是小于 k ,返回假。

当 check 返回的是真的时候,我们就要试试还能不能把 mid 调大一点,就要

l = mid;

如果返回的是假,我们就加的太大了,就要把 mid 调小一点,就要

r = mid;

一直到结束,输出 l 就可以了。

其实最长的长度不会超过里面最长的一根的长度,可以先将长度排序,然后找到最长的,就是r初值,这样也可以减少一些判断。

题目背景

要保护环境

题目描述

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

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

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

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

输入格式

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

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

输出格式

仅一行,即 ll 的最大值。

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

输入输出样例

输入 1

3 7
232
124
456

输出 1

114

解题代码:

#include<stdio.h>
#include<iostream>
using namespace std;
int n,k,maxl;
int a[100010];
bool check(int ml){int num = 0;for(int i=0;i<n;i++){num += a[i] / ml;if(num >= k) return true;}return false;
}
int main(){cin>>n>>k;for(int i=0;i<n;i++)cin>>a[i];int l=0,r=100000001;while(l+1<r){maxl=(l+r)/2;if(check(maxl)) l=maxl;else r=maxl;}cout<<l;return 0;
}

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

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

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

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

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

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

    P2440 木材加工 题意 给定N个木头及其长度,要求把这些木头切割成M块长度相同的小段木头(木头有可能有剩余),求小段木头的最大值. 比如:有两木头长度为 11 和 21, 要求切成 6 块, 那么 ...

  4. 洛谷——P2440 木材加工

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

  5. [二分][前缀和]洛谷 P1083 借教室

    题意: 有n天,m个请求.n天内每天的可用教室为a_ia​i​​个,m个请求是从l到r天租借t个教室. 如果某一天的教室分配无法满足,则输出当前的订单号. 思考: 一开始根本没想到这个东西怎么二分.. ...

  6. 洛谷P4956 [COCI2017-2018#6] Davor 题解

    # [COCI2017-2018#6] Davor ## 题面翻译 在征服南极之后,Davor 开始了一项新的挑战.下一步是在西伯利亚.格林兰.挪威的北极圈远征.他将在 $2018$ 年 $12$ 月 ...

  7. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

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

    洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...

  9. 二分答案——数列分段 Section II(洛谷 P1182)

    题目选自洛谷P1182 本题解法:二分答案+贪心 思路:首先,分析题目,求最大值的最小化,直接联想到二分,So我们直接二分答案,关键是要怎么去高效的check,我们考虑一个贪心的思路,能加的就加上,不 ...

最新文章

  1. torch.backends.cudnn.deterministic 生成随机数字设置 每次输出一样的方法
  2. vue开发入门篇(二)-axios POST提交数据的三种请求方式写法
  3. WampServer详解
  4. php yaml扩展,php的扩展 - yaml
  5. 隐私安全保护再升级!苹果强制要求APP必须有删除账号功能
  6. Mac/Linux/Win使用scrcpy投屏
  7. UOJ291 BZOJ4785 ZJOI2017树状数组
  8. 金融危机下窗帘选购秘籍
  9. discuz自定义模板制作
  10. 3-8 Aruba交换机实用配置-链路聚合 2020
  11. 跑步机行业研究及十四五规划分析报告
  12. python风格变换图片_利用神经网络轻松把照片转换成梵高风格
  13. React中CSS样式
  14. 【web学习之mysql】 mysql- 学习 - 城市选择
  15. 数据分析统计学原理第十三章:实验设计与方差分析 | 我的统计学原理复习日记
  16. 饥荒服务器怎么显示帧数,进化游戏卡顿优化方法 附最高帧数120帧设置方法
  17. css transform属性详解
  18. lindo中的0-1约束
  19. B轮融资超过亿元,灵雀云为什么能拿这么多钱?
  20. android rar工具,RAR压缩工具apk下载|RAR压缩工具安卓版下载 V5.7.2 - 跑跑车安卓网...

热门文章

  1. Pixysoft.Framework.Noebe.Comets开发实录
  2. python里面的工厂模式
  3. php软件开发--vue基础
  4. 周末总是被工作打扰_如何在不打扰任何人的情况下问为什么在工作中
  5. Emacspeak,Linux的声音界面
  6. 开源 sql 代码提示工具_有关如何计划开源活动的提示
  7. 查询数据库中数据的年份_本地公开数据中的年份
  8. 基于React+Koa实现一个h5页面可视化编辑器-Dooring
  9. 推荐一个Python的开源小工具大合集!
  10. SLAM Cartographer(2)ROS封装