经典题。二分答案。
二分木棍的值mid,遍历一次数组看得到的个数是不是≥所要求的k个,是的话,考虑提高二分下界,即l=mid
否则说明mid过大,考虑下调二分上界,即r=mid
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a[1<<21]; int main(){ int n,k;cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; int l=0,r=2e9; while(l+1<r){ int mid=l+r>>1; ll cnt=0; for(int i=1;i<=n;i++) cnt+=a[i]/mid; if(cnt>=k) l=mid; else r=mid; } cout<<l<<endl; return 0; }