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; }