483 字
2 分钟阅读
牛客每日一题 2025.12.11 小红的矩阵

原题链接: https://www.nowcoder.com/share/jump/580869461765445493666

思路: 注意到矩阵大小非常大,无法构建原矩阵暴力查找。因为答案满足单调性,所以我们可以用二分去猜一下这个答案是多少,也就是二分答案。每check一次需要以行或者列枚举一遍算一下这一列有多少个数小于 x ,如果整个矩阵小于 x 的数量多余 k ,那就向左缩减二分边界,反正亦然。

bool check(ll x,ll n,ll m,ll k){
    ll cnt = 0;
    for(int i = 1;i <= m;i++){
        if(x / i == 0){
            break;
        }
        cnt += min(x / i,n);
    }
    return cnt >= k;
}
 
void solve(){
    ll n,m,k;
    cin >> n >> m >> k;
    ll l = 1;
    ll r = n * m;
    ll ans = 0;
    while(l <= r){
        ll x = l + ((r - l) >> 1);
        if(check(x,n,m,k)){
            r = x - 1;
            ans = x;
        }else{
            l = x + 1;
        }
    }
    cout << ans;
}

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注