题意:N根木棍,截成至少K根等长木棍,求这K根木棍的最大长度。(木棍不可拼接)
思路:木棍数量最大为2e5,给定长度计算木棍数量最多只需2e5次计算,所以只需二分答案便可求出结果。
代码:
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=2e5+10; int a[N],n,k; void read() { cin>>n>>k; for(int i=0;i<n;i++) scanf("%d",a+i); } ll sum(int len) { ll s=0; for(int i=0;i<n;i++) s+=a[i]/len; return s; } void slove() { int l=1,r=1<<30,mid; while(l<=r){ mid=(l+r)>>1; if(sum(mid)<k) r=mid-1; else l=mid+1; } cout<<r<<endl; } int main() { read(); slove(); return 0; }