本文主要是介绍木材加工(二分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目名字 木材加工
题目链接
题意
一共有n个木头,然后要将他们截成m个相等长度的木头,求能截的最大的木头的长度
思路
- 循环输入这个木头
- 进行二分,在二分模板里面进行判断,定义ans来计数,利用每个木头来除mid,用ans来进行统计这些木头被截成mid长度能被截多少段,如果大于等于m,就使边界往右移,如果,小于就往左,就能找到最大的能截得的木头长度了
算法一:二分
代码
#include<iostream>
#include<algorithm>
using namespace std;int n,k;
const int N=1e5+5;int a[N];int ans=0;int find(int l,int r){ while(l<=r){int mid=l+r>>1;int ans=0;for(int i=0;i<n;i++){ans+=a[i]/mid;}if(ans>=k){l=mid+1;}else{r=mid-1;}}return r;}
int main(){cin>>n>>k;for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);int l=1,r=a[n-1];int x=find(l,r);cout<<x;return 0;
}
这篇关于木材加工(二分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!