#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5+5;
int n,k;
int a[maxn];
bool check(int x){
int cnt=0;
for(int i=1;i<=n;i++){
cnt+=a[i]/x;
}
if(cnt>=k)
return true;
return false;
}
signed main(){
cin>>n>>k;
int l,r;
l=0,r=0;
for(int i=1;i<=n;i++){
cin>>a[i];
r=max(r,a[i]);
}
int ans=0;
while(l<r){
int mid=(l+r)/2+1;
if(check(mid)){
ans=max(ans,mid);
l=mid;
}
else
r=mid-1;
}
cout<<ans;
return 0;
}
为什么我这样写是错的:
while(l<r){
int mid=(l+r)/2;
if(check(mid)){
ans=max(ans,mid);
l=mid+1;
}
else
r=mid;
}
而这样写是对的:
while(l<r){
int mid=(l+r)/2+1;
if(check(mid)){
ans=max(ans,mid);
l=mid;
}
else
r=mid-1;
}