[计蒜客][二分]切割钢管 原创
题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛)
算法标签 二分
题目描述
思路
我们要算最高数量,则要计算某一个高度,总共能被N个钢管切出K个来
计算一个钢管能切出多少只需要a[i]/NUM
只要计算一遍a数组即可,现在的目标转为了怎么求出目标值NUM
则我们需要用二分查找即可,直接极限值进行测试…
AC代码
#include<iostream>
using namespace std;
const int N=1e4+10;
int a[N];
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)cin>>a[i];
int l=1,r=100000000;
while(l<=r)
{
int t = 0;
int mid = l+r>>1;
for(int i=0;i<n;i++)t+=a[i]/mid;
if(t>=k)l=mid+1;//t过大,压缩t,则需要抬高mid
else r=mid-1;
}
cout<<r;
return 0;
}