题解 | 小红的矩阵

小红的矩阵

https://www.nowcoder.com/practice/eec2ed5b48b04a1492209ba08593a830

观察到数据范围很大,不能暴力找

既然说了找到第k小,我们就想到一个高效率的查找:二分查找

如何计算每一行中小于k的个数呢

首先一行至多m个,根据题目公式i*j,我们假定找到的数为mid,有i*j<=mid

也就是j<=mid/i;

对每一行统计,得到最终结果并且更新答案就好了

int main(){
    ll n,m,k;cin>>n>>m>>k;
    ll l=1,r=n*m;
    ll ans=n*m;
    while(l<=r){
        ll mid=(l+r)/2;
        ll cnt=0;
        for(ll i=1;i<=n;i++){
            cnt+=min(m,mid/i);
        }
        if(cnt>=k)ans=mid,r=mid-1;
        else l=mid+1;
    }
    cout<<ans<<endl;
}

全部评论

相关推荐

牛客98820962...:个人意见,我觉得实习和项目经历要一致,达美乐感觉没必要写
点赞 评论 收藏
分享
喵_coding:项目太烂了外卖+点评啊 而且寒假实习差不多到时候了 hc没多少了 要实在想要找那只能投投大厂试试了
点赞 评论 收藏
分享
Edgestr:没项目地址就干脆把那一栏删了呗
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务