这题算是水题。。
题目大意:
给N根长度不一样的木棍,现在可以对木棍进行剪裁,问经过剪裁以后能否得到K根长度一样的木棍。多出来的可以不用。问最长可以剪裁成多少长度相同的K根木棍。
N<=200000
思路:
二分长度。
然后每次判断当前二分的长度能不能组成K根木棍。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,a[200040];
long long sum;
bool check(long long x){
int t=0;
for(int i=1;i<=n;i++){
t+=a[i]/x;
if(t>=k)return true;
}
return false;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
long long l=0,r=sum/k;
while(l<r){
long long mid=l+r+1>>1;
if(!check(mid))r=mid-1;
else l=mid;
}
cout<<r<<endl;
return 0;
}
京公网安备 11010502036488号