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;
}
