题目大意是说给你n个木棒,让你把他们切割成相同长度的k块,问每块最长长度是多少。
比较简单,就是二分答案,然后注意下精度,注意要用long long ~
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=10010;
const double eps=1e-3;
long long n,k,a[maxn];
bool test(long long val)
{
if(val==0)
return true;
long long cnt=0;
for(int i=0;i<n;i++)
cnt+=a[i]/val;
if(cnt>=k)
return true;
return false;
}
int main()
{
while(scanf("%I64d%I64d",&n,&k)!=EOF)
{
long long l=0,r=0;
for(int i=0;i<n;i++)
{
double val;
scanf("%lf",&val);
a[i]=val*100;
r=max(r,a[i]);
}
long long ans=0;
while(r>=l)
{
long long mid=(l+r)/2;
if(test(mid))
{
ans=max(ans,mid);
l=mid+1;
}
else
r=mid-1;
}
printf("%.2lf\n",ans*1.0/100);
}
return 0;
}