关于答案为0时的发现
查看原帖
关于答案为0时的发现
336981
竹下的魂楼主2020/8/18 13:56

我本来打了套板子,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;
}
2020/8/18 13:56
加载中...