木材加工(二分)
2023-12-28 22:29:08
题目名字 木材加工
题意
一共有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;
}
文章来源:https://blog.csdn.net/CocowhoLynn/article/details/135278856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!