二分答案——洛谷P2440木材加工
- 题目描述
- 问题分析
这个题目是一类典型的二分答案问题,题目中给出我们需要将给定的长度切割成相应的K段,并且保证切割的小段的最大长度,那么我们怎么做呢,必然是在一定的区间枚举出来该切成多少才能满足切成k段并且保证长度最大,其实这里我们可以考虑二分的思想,比方说,我们最大能切的长度必然不会比原来的木头的最大的那一根还要长,并且我们确定最小可以切出1cm,若是1cm切不出便输出0.
那么二分区间的左端点l = 1, 右端点r = max({l1, l2, l3, l4…ln)
我们该怎么找呢在这个二分区间内我们就像二分查找类似的写法,在左边子区间或者右边子区间逐步逼近找出误差最小的答案,我们这时不能像二分查找对应元素那样去考虑,而是写一个check函数,我比较喜欢叫check,然后我们将每一个木头切割这个长度(向下取整)然后将可以切割的数量相加在与给定切割的数目k作为比较,如果res >= k那么证明,所切割的值偏小,那么我们应该往右区间去找,反之找左区间。
bool check(LL x) {LL res = 0;for (int i = 1; i <= n; i++) {res += a[i] / x;}return res >= K;
}
- AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + 5;LL a[maxn];int n;
LL K;
LL l = 1, r = -1;bool check(LL x) {LL res = 0;for (int i = 1; i <= n; i++) {res += a[i] / x;}return res >= K;
}int main() {scanf("%d%lld", &n, &K);for (int i = 1; i <= n; i++) {scanf("%lld", &a[i]);r = max(r, a[i]);}LL ans = 0;while (l <= r) {LL mid = (l + r) >> 1;if (check(mid)) {ans = mid;l = mid + 1;} else {r = mid - 1;}}printf("%lld\n", ans);return 0;
}
总结:
二分答案是在竞赛中常考的类型,其思想也是基于二分的变形,分析问题,给出以下常见题目中的关键字,判断是否使用二分。
第一类问题:
二分答案应用求解问题
求最大长度中的可能最小值是多少
问最小重量的最大值是多少
第二类问题:
最少要多少才能满足要求
在满足限制的情况下最大值是多少
对于第二类问题,我们可以抽象
对于x, 有一个函数f(x), 值域为{0,1}
求满足f(x) = 0时 x的最大值
将第一类问题转换为第二类问题
对于第一类问题
我们抽象:
对于x, 有一个函数f(x)
求当满足f(x) <= M时x的最大值 。
二分答案——洛谷P2440木材加工相关推荐
- 洛谷 P2440 木材加工 (二分答案)
P2440 木材加工 题意 给定N个木头及其长度,要求把这些木头切割成M块长度相同的小段木头(木头有可能有剩余),求小段木头的最大值. 比如:有两木头长度为 11 和 21, 要求切成 6 块, 那么 ...
- 洛谷 P2440 木材加工(二分,含边界处理的笔记)
题目链接: 木材加工 - 洛谷https://www.luogu.com.cn/problem/P2440 非常简单的题目,用left和right控制二分边界,ans一开始是0,每次check到符合 ...
- 二分查找和二分答案(洛谷)
细节好可怕~ 二分查找算法的细节剖析_JackComeOn的博客-CSDN博客原文:https://www.cnblogs.com/kyoner/p/11080078.html我周围的人几乎都认为二分 ...
- 洛谷——P2440 木材加工
https://www.luogu.org/problem/show?pid=2440#sub 题目背景 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木 ...
- 二分答案——木材加工(洛谷 P2440)
题目选自洛谷P2440 读完题目后应该有个大致思路,看得出来是二分查找的题. 首先我们输入 n 和 k 并且运用二分找到合适的尺寸,而l 必须要足够小,r 必须要足够的大.题中写道数组中的数最大不会超 ...
- 【二分答案】Problem C:木材加工
Problem C:木材加工 Time Limit:1000MS Memory Limit:65536K Total Submit:48 Accepted:20 Description [问题描述] ...
- 洛谷P2240木材加工
题目链接 洛谷P2240 题目描述 木材厂有 n根原木,现在想把这些木头切割成 k 段长度为l的小段木头(木头有可能有剩余). 当然,我们希望得到的小段木头越长越好,请求出 l的最大值. 木头长度的单 ...
- 跳跳棋[LCA+二分查找]-洛谷1852
传送门 这真是一道神仙题 虽然我猜到了这是一道LCA的题 但是... 第一遍看题,我是怎么也没想到能和树形图扯上关系 并且用上LCA 但其实其实和上一道lightoj上的那道题很类似 只不过那时一道很 ...
- 洛谷P1182 数列分段Section II 二分答案
洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...
最新文章
- 病毒进入体内的48小时
- Vcenter5.5安装部署:[2]web client的安装
- BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治
- QSettings allKeys读取为空分析
- “掌上神策”上线,数据解读随时随地
- Elasticsearch 实例管理在京东的使用场景及演进之路
- 2018“百度之星”程序设计大赛 - 复赛
- 《Python学习之路 -- 字符串的方法》
- 苹果概念手机_吊打华为苹果!马云概念手机终于问世?
- Python模块_re正则表达式模块-2
- 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割
- 如果你学习C 请不要选择DevCpp
- 网卡驱动DM9000-基于uboot
- 阿尔伯塔大学计算机科学的申请条件,阿尔伯塔大学计算机科学硕士专业
- [图文]TDateTime And TTime(转)
- 漫画算法:什么是跳跃表?
- 现在社会趋势下,很多人想做网上商城,那你知道软件部署方式吗?
- MyHandler.h对消息accu的处理
- OneDrive登录失败解决办法
- CentOS7 初次安装记录(三)配置PHP和MYSQL