题目背景

要保护环境

题目描述

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

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

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

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

输入格式

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

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

输出格式

仅一行,即 ll 的最大值。

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

输入输出样例

输入 #1

3 7
232
124
456

输出 #1

114

说明/提示

分析

二分答案就是说用 二分 的方法枚举答案,具体请看例子:洛谷 P2440 木材加工

第一步:找出答案的范围所在即low=0;high=1e8+1;即可将所有答案包含在范围内;

第二步:对答案进行二分;通过check函数判断答案是大是小;

check函数怎么写呢:需要依次判断每一个原木能切出几个mid,如果切出来的mid大于或者等于输入的k;则return true;否则return false;表示不可行

第三步:

二分循环中缩小区间:如果返回是真则mid是较小的,所以需要缩小low,则让low=mid;

如果返回的是false,则mid较大,无法切出那么多,则需要让mid减小,所以high=mid-1;-1保证循环能出去;

第四步:以此类推,直到结束条件:low>=high,

#include<iostream>
#include<string>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int arr[N];
int n, k;
bool check(int x) {int ans = 0;for (int i = 0;i < n;i++) {ans += arr[i] / x;}return ans >= k;//若果能切出的结果大于k,则需要增大mid;
}
int search() {int low = 0;int high = 100000010;while (low < high) {int mid = low + high + 1 >> 1;if (check(mid)) low = mid;else high = mid-1;}return low;
}
signed main()
{cin >> n >> k;for (int i = 0;i < n;i++) {cin >> arr[i];}cout << search() << endl;
}

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

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

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

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

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

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

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

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

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

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

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

  6. 洛谷——P2440 木材加工

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

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

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

  8. 洛谷P2240木材加工

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

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

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

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

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

最新文章

  1. strstr函数头文件_C语言(函数)学习之strstr strcasestr
  2. java web netty_基于Netty的非Servlet规范 JavaWeb框架及高性能 Java服务器
  3. ImageLoader must be init with configuration before using 错误解决方法
  4. LintCode 802. 数独(回溯)/ LeetCode 37. 解数独
  5. 用ISA 2004发布内部FTP服务器
  6. 皮尔逊/斯皮尔曼相关系数
  7. 【华为机试真题 Python实现】统计射击比赛成绩
  8. 使用小程序云开发添加背景音乐
  9. 汉诺塔自动解题动画中的iOS开发技巧
  10. 获取URL地址时某些参数被转义
  11. 二进制数字的表示方法
  12. 时间复杂度计算--求两正整数最大公约数
  13. 阿里云二级域名解析教程
  14. 计算机专业可以考天文学研究生吗,天文学专业强势高校来袭 看似冷门考生却挤破头都想去...
  15. Django连接MySQL数据库错误:django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module
  16. B2117 整理药名
  17. python与pdf与word(datawhale组队学习task3)
  18. vue下拉框使用法则
  19. 粉刷匠 BZOJ - 1296
  20. C++ 多态(补充)

热门文章

  1. Scala入门系列(十二):隐式转换
  2. Matlab基础部分第一章 MATLAB概述第二章MATLAB基础知识
  3. Java实现 蓝桥杯VIP 算法提高 字符串跳步
  4. Cannot determine path to ‘tools.jar‘ library for 1.8 (C:/Program Files/Java/jdk-18)
  5. java 日期 面试题_Java面试试题日期和时间
  6. 计算机丢失lame,【图片】小白求教如何设置lame.exe(为无损转320K MP3)求告知。【foobar2000吧】_百度贴吧...
  7. 前端大屏幕项目大厂解决兼容问题(react)
  8. Java 基础类型 —— Short
  9. USB大容量存储设备无法启动--这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。
  10. stm32f103r8t6的晶振频率_STM32F103R8T6 中文资料