经典题。二分答案。
二分木棍的值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;
}
京公网安备 11010502036488号