洛谷 P2440 木材加工【基础二分】
题目问题链接:hts://ss.luogu.org/problemnew/show/P2440
题目问题形容木材厂有一些本木,如今想把那些木头切割成一些长度雷同的小段木头(木头有可能有
剩余),须要获得的小段的数目是给定的。虽然,咱们欲望获得的小段木头越长越好,你的任务
是计较能够获得的小段木头的最大长度。木头长度的单位是cm。本木的长度都是正整数,
咱们要求切割获得的小段木头的长度也是正整数。
譬喻有两根本木长度划分为11和21,要求切割成到等长的6段,很鲜亮能切割出来的小段木头长度最长为5.
输入格局:
第一止是两个正整数N和K(1 ≤ N ≤ 100000,1 ≤ K ≤ 100000000),N是本木的数目,K是须要获得的小段的数目。
接下来的N止,每止有一个1到100000000之间的正整数,默示一根本木的长度。
输尤其式:
能够切割获得的小段的最大长度。假如连1cm长的小段都切不出来,输出”0”。
输入样例#1: 3 7 232 124 456
输出样例#1:
114
#include<bits/stdc++.h> using namespace std; int n, k, a[10000], l, r, mid, now; int main() { cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; l = 0; r = 10000; while (l <= r) { mid = (l + r) / 2; now = 0; //统计块数值清空 for (int i = 1; i <= n; i++) now += a[i] / mid; //依据所枚举的最大长度,算出能够获得的小段数目 if (now<k) r = mid - 1; else l = mid + 1; //假如块数太小,左指针改为mid-1,缩小距离,否则右指针改为mid+1,缩小距离 } cout << l - 1; //因为最后折乎的时候,是l=mid+1跳出循环,此时 l=mid+1=r+1 ,而此时的mid即为所求,所以输出l-1 }
2018-05-29
做者:is_ok
缘故:
原文版权归做者和博客园共有,接待转载,但未经做者赞成必须糊口生涯此段声明,且正在文章页面鲜亮位置给出本文连贯,否则糊口生涯清查法令义务的势力。