每日一题4/16,二分题解
华华给月月准备礼物
http://www.nowcoder.com/questionTerminal/9963334321e64e61a397b262708e4f65
题意:将n个木条切割,至少得到k个相同木条的最大长度是多少
思路:二分求解
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll num[200005];
int n,k;
bool pd(ll x)
{
int cnt=0;
for(int i=0;i<n;i++)
cnt+=num[i]/x;
return cnt>=k;
}
int main()
{
cin >> n >> k;
ll l=1,r=1,m;
for(int i=0;i<n;i++)
{
scanf("%lld",&num[i]);
r=max(r,num[i]);
}
while(l<=r)
{
m=(l+r)>>1;
if(pd(m))
l=m+1;
else
r=m-1;
}
cout << r;
return 0;
}