Solution:
木棍合理范围即初始区间是[0,n项和/k],n项和/k是理想情况不考虑木棍分段的最大长度,或者默认用一个比较大的数字开始分也可以。然后二分棍子的长度,根据截得的段数总和来判断是否满足要求。
#include<stdio.h>
int main()
{
long long n,k,num,i,j,p;
double l,r,m,a[200005];
scanf("%lld%lld",&n,&k);
for(i=0; i<n; i++)
scanf("%lf",&a[i]);
l=0.0,r=100000000000.0;
for(i=0; i<100; i++)
{
num=0;
m=(l+r)/2.0;
for(j=0; j<n; j++)
num+=int(a[j]/m);
if(num>=k)
l=m;
else
r=m;
}
if(int(r*1000)%10>4)
r-=0.01;
p=r;
printf("%lld\n",p);
return 0;
}
京公网安备 11010502036488号