`
Simone_chou
  • 浏览: 192647 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Multiplication Table(二分搜索)

    博客分类:
  • CF
 
阅读更多
D. Multiplication Table
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Bizon the Champion isn't just charming, he also is very smart.

While some of us were learning the multiplication table, Bizon the Champion had fun in his own manner. Bizon the Champion painted ann × m multiplication table, where the element on the intersection of the i-th row and j-th column equals i·j (the rows and columns of the table are numbered starting from 1). Then he was asked: what number in the table is the k-th largest number? Bizon the Champion always answered correctly and immediately. Can you repeat his success?

Consider the given multiplication table. If you write out all n·m numbers from the table in the non-decreasing order, then the k-th number you write out is called the k-th largest number.

Input

The single line contains integers nm and k (1 ≤ n, m ≤ 5·105; 1 ≤ k ≤ n·m).

Output

Print the k-th largest number in a n × m multiplication table.

Sample test(s)
input
2 2 2
output
2
input
2 3 4
output
3
input
1 10 5
output
5
Note

2 × 3 multiplication table looks like this:

1 2 3
2 4 6

 

        题意:

        给出 n,m(1 ~ 5 * 10 ^ 5 ),k (1 ~ n * m ),代表有 n 行 m 列的数据,矩阵中的值为 i * j。求出矩阵中第 k 个大的数。

 

        思路:

        二分搜索。取区间为左开右闭区间,扫描每一行 num / i 的值有几个,算出的这个总数如果大于 k,不能说明这个数不是第 k 个大的数,因为可能会有重复的,但是如果这个总数小于 k,一定能说明这个数并非第 K 个大的数,所以这时候应该往右边搜,最后搜出来右区间的值即为答案。还有细节地方要处理就是 扫描每一行的时候要进行 min(num / i , m)操作,因为有可能除出来的数大于列数,那么加上的应该是这一行的列数个,而不是除数个。

 

        AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

ll n, m, k, l, r;

ll C (ll num) {
        ll ans = 0;

        for (ll i = 1; i <= n; ++i) 
                ans += min((num / i), m);

        return ans;
}

void bit_search () {

        while (r - l > 1) {
                ll mid = l + (r - l) / 2;

                if (C(mid) < k) l = mid;
                else r = mid;
        }

        printf("%I64d\n", r);
}

int main() {

        scanf("%I64d%I64d%I64d", &n, &m, &k);

        l = 0;
        r = n * m;

        bit_search();

        return 0;
}

 

 

分享到:
评论

相关推荐

    程序打印九九乘法表cmd

    3. 使用`g++ multiplication_table.cpp -o multiplication_table`命令进行编译,生成可执行文件`multiplication_table`。 4. 运行生成的可执行文件:`./multiplication_table`(Linux/macOS)或`multiplication_...

    python3.0 乘法口诀表

    以下是一个简单的Python脚本`multiplicationTable.py`的示例代码: ```python for i in range(1, 10): for j in range(1, i+1): print(f"{j}x{i}={i*j}", end="\t") print() # 换行 ``` 在这个代码中: 1. `...

    代码实现复合型语法

    def print_multiplication_table(n): for i in range(1, n + 1): for j in range(1, n + 1): print(f"{i} * {j} = {i * j}", end="\t") print() # 换行 # 测试 print_multiplication_table(5) ``` 这里使用了...

    深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表

    二分查找适用于已排序的数组,它通过将目标值与数组中间元素比较来缩小搜索范围。如果目标值等于中间元素,返回该位置;如果目标值小于中间元素,搜索左半部分;否则搜索右半部分。PHP中,`erfenfa`函数实现了这个...

    Data Structures and Algorithms with Python

    - 二分查找(Binary Search) - 动态规划(Dynamic Programming) - 背包问题(Knapsack Problem) - 最长公共子序列(Longest Common Subsequence) - 分治法(Divide and Conquer) - 快速幂(Fast Powering) - 大整数...

    matlab入门之旅总结

    - `matrixMultiplication = [11;11]*[22;22]`执行矩阵乘法。 - `elementMultiplication = [11;11].*[22;22]`执行按元素乘法。 - `sizeResult = size(A)`返回矩阵的大小,即行数和列数。 - `[maxValue, index] = ...

    java基本语法

    public class MultiplicationTable { public static void main(String[] args) { for (int i = 1; i ; i++) { for (int j = 1; j ; j++) { System.out.print(j + "*" + i + "=" + (i * j) + "\t"); } System....

    计算机编程英语词汇

    2. **二分查找 (Binary Search)**:在有序数组中查找指定元素的高效算法。 #### 十七、中位数 (Median and Selection) 中位数是将一组数按大小顺序排列处于中间位置的数。 1. **选择算法 (Selection Algorithm)**...

    常用计算机词汇英文缩写

    - **定义**:Decode 是指将二进制指令翻译成 CPU 可以理解的形式的过程。 - **作用**:确保 CPU 正确执行程序指令。 **16. DIB(Dual Independent Bus,双独立总线)** - **定义**:DIB 是指在系统中使用两条...

    cpu中英文术语中英文对照

    - TLBs分为一级TLB和二级TLB,分别位于CPU的内部和外部,一级TLB速度更快但容量较小,二级TLB容量较大但速度较慢。 - TLBs采用类似于高速缓存的工作原理,具有替换策略等机制。 #### HL-PBGA (High-Lead Pin Grid...

Global site tag (gtag.js) - Google Analytics