2655|2655 切木头(二分)

有n个木棍,长度不等,现在要将他们切成同等长度的木棍m个,并且每段的长度都为整数。问这m根木棍最长能有多长?
如果分不出来,输出0。
输入
第一行2个数:n, m中间用空格分隔(1 <= n <= 100000, 1 <= m <= 10^9)
后面n行:每行1个数,对应木棍的长度(1 <= Li <= 10^9)。
输出
输出一个整数,对应木棍的长度。
输入样例
【2655|2655 切木头(二分)】3 10
15
25
12
输出样例
5

#include using namespace std; int n,m; int a[100010],l,r=0,mid,maxn=0; int find(int x) { if(x==0) return false; int sum=0; for(int i=1; i<=n; i++) sum+=a[i]/x; if(sum>=m) return true; return false; } int main() { ios::sync_with_stdio(false); cin>>n>>m; for(int i=1; i<=n; i++) { cin>>a[i]; r=max(r,a[i]); } l=1; // while(l<=r) { mid=(l+r)/2; if(find(mid)) { maxn=max(maxn,mid); l=mid+1; } else r=mid-1; } cout<

    推荐阅读