题解:
我们要的是找最大的长度,使得所有木棍能截成最少根长度为的木棍。
第根木棍最多显然能截成长度为的木棍,为第根木棍的原始长度。
因为若,所以能截成的数量是随着木棍长度单调递增而递减的,所以可以采用二分,二分木棍的长度,然后求满足最少根的最大值
#include<bits/stdc++.h> using namespace std; int a[200005]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int l=1,r=1e9; int ans=0; while(l<=r) { int mid=l+r>>1; long long k=0; for(int i=1;i<=n;i++) { k+=a[i]/mid; } if(k>=m) { ans=mid; l=mid+1; } else { r=mid-1; } } printf("%d\n",ans); }