我本来打了套板子,a了这题,结果看到了输出说明中的输出可能为0,而我的二分边界为1至1e9(不从0开始是为了杜绝÷0这种行为发生),因为之前一直觉得答案肯定在二分边界之间,所以产生了疑惑
【注意,我只针对这套板子,不针对其他板子!!】但是如果说check一直返回0,那么ans就不会有机会成为mid,换言之,二分结束后的ans也就和它的初始值有关
#include <iostream>
#include <algorithm>
using namespace std;
int n,k,arr[100005];
bool P(int x){
long long tot = 0;
for(int i = 0;i<n;i++)
tot+=arr[i]/x;
return tot>=k;
}
int main(){
cin>>n>>k;
for(int i = 0;i<n;i++)cin>>arr[i];
int l = 1,r = 1e9,ans = 0;
while(l<=r){
int mid = l+(r-l)/2;
if(P(mid))
ans = mid,l = mid+1;
else
r = mid-1;
}
cout<<ans;
return 0;
}