• [CF448D] Multiplication Table


    [CF448D] Multiplication Table - 二分

    Description

    给出一个 (f[i][j]=ij),求其中第 k 小的数。(n,m le 5 imes 10^5)

    Solution

    显然我们可以 O(n) 求出小于等于某个数的数字有多少个

    二分即可

    具体地,二分一个 mid,我们可以计算处小于等于 mid 的个数 cnt,如果 cnt>=k 则表明 mid 可能大了,否则 mid 小了

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    signed main()
    {
        ios::sync_with_stdio(false);
        int n, m, k;
        cin >> n >> m >> k;
        // k = n * m - k + 1;
        int l = 1, r = 1e12;
        while (l < r)
        {
            int mid = (l + r) / 2;
            int cnt = 0;
            for (int i = 1; i <= n; i++)
                cnt += min(m, mid / i);
            if (cnt >= k)
                r = mid;
            else
                l = mid + 1;
        }
        cout << l;
    }
    
  • 相关阅读:
    计算机故障
    线程池&进程池
    机箱-网卡-声卡-显卡-显示器
    scrapy请求传参-BOSS反爬
    计算机硬件-主板
    计算机硬件-内存
    计算机硬件-硬盘
    计算机硬件-CPU
    ZJNU 1223
    ZJNU 1217
  • 原文地址:https://www.cnblogs.com/mollnn/p/14413361.html
Copyright © 2020-2023  润新知