文章

54

粉丝

1100

获赞

1515

访问

129w

头像
乘法 题解:不要犹豫,考试时先做了再说
P1909 华东师范大学2022年机试
发布于2025年3月18日 16:13
阅读数 179

这道题考试的时候可以n*m再快速查找,据说也是能通过的,虽然时间复杂度不达标,每年都有这种情况,24年也有

正解是二分
时间复杂度:排序的时间复杂度为 O (n log n + m log m),二分查找的时间复杂度为 O ((n + m) log r),其中 r 是二分查找的范围,所以总的时间复杂度为 O ((n + m) log r)。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 检查矩阵中大于等于 mid 的元素个数是否不少于 K
bool check(const vector<int>& A, const vector<int>& B, long long mid, int K) {
    int n = A.size();
    int m = B.size();
    long long count = 0;
    for (int i = 0; i < n; ++i) {
        if (A[i] > 0) {
            // 找到满足 A[i] * B[j] >= mid 的最小的 j
            int left = 0, right = m - 1;
            int pos = m;
            while (left <= right) {
                int midIndex = left + (right - left) / 2;
                if ((long long)A[i] * B[midIndex] >= mid) {
                    pos = midIndex;
                    right = midIndex - 1;
                } else {
                    left = midIndex + 1;
            ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发