AcWing 4080. 第k個數(二分)


題意

給定一個 \(n \times m\) 的方格矩陣,每個方格內都有一個整數元素。

其中第 \(i\) 行第 \(j\) 列的方格中的元素為 \(i \times j\) (行和列都從 1 開始編 믁)

現在,需要你將這 \(n \times m\) 個整數按照非嚴格單調遞增的順序一一寫 出。
請問,你寫出的第 \(k\) 個整數是多少。

算法

二分

check函數實現<= mid的數是否有k個即可。

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
const int MOD = 1e9 + 7;
typedef long long LL;
LL n, m, k;
LL check(LL mid){
    LL res = 0;
    for(int i = 1; i <=n; i++){
        res += min(m,  mid / i);
    }
    return res >= k;
}
int main(){
    
    scanf("%lld%lld", &n, &m);
    scanf("%lld", &k);
    LL l = 1, r = n * m;
    while(l < r){
        LL mid = (l + r)>>1;
        if(check(mid)) r = mid;
        else l = mid + 1;
    }
    cout<<r<<endl;
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM