以下是使用C++实现的解决方案:

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

using namespace std;

struct Point {
    int x;
    int y;
};

bool comparePoints(const Point& p1, const Point& p2) {
    return p1.x < p2.x;
}

bool binarySearch(const vector<Point>& points, int targetY, int targetX) {
    int left = 0;
    int right = points.size() - 1;

    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (points[mid].y > targetY && abs(points[mid].x - targetX) <= abs(points[mid].y - targetY)) {
            return true;
        }

        if (points[mid].y > targetY) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }

    return false;
}

vector<bool> checkPairs(const vector<int>& x, const vector<int>& y) {
    int n = x.size();
    vector<Point> points(n);

    for (int i = 0; i < n; i++) {
        points[i].x = x[i];
        points[i].y = y[i];
    }

    sort(points.begin(), points.end(), comparePoints);

    vector<bool> result(n, false);

    for (int i = 0; i < n; i++) {
        result[i] = binarySearch(points, y[i], x[i]);
    }

    return result;
}

int main() {
    int n;
    cin >> n;

    vector<int> x(n), y(n);

    for (int i = 0; i < n; i++) {
        cin >> x[i] >> y[i];
    }

    vector<bool> result = checkPairs(x, y);

    for (int i = 0; i < n; i++) {
        cout << (result[i] ? "YES" : "NO") << endl;
    }

    return 0;
}

在主函数中,首先输入n,然后输入n个x和y的值。然后调用checkPairs函数计算每个点是否存在符合条件的配对。最后输出结果。

checkPairs函数中,首先创建一个Point结构体的向量,每个点包含x和y的值。然后对这个向量按照x的值进行排序。接下来创建一个与结果大小相等的向量,初始化为false。然后遍历每个点,通过二分查找确定是否存在符合条件的配对。最后返回结果向量。

在二分查找函数binarySearch中,使用二分查找算法在已排序的点向量中查找符合条件的配对。left和right分别表示查找范围的左右边界。在每次循环中,计算中间索引mid。如果中间点满足条件,则返回true。如果中间点的y大于目标y,则说明符合条件的配对可能在左侧,将right更新为mid-1。如果中间点的y小于等于目标y,则说明符合条件的配对可能在右侧,将left更新为mid+1。最后,如果循环结束仍未找到符合条件的配对,则返回false。

整体的时间复杂度为O(nlogn),其中n为点的数量。排序的时间复杂度为O(nlogn),每个点进行二分查找的时间复杂度为O(logn),总共需要进行n次二分查找。

给定n个 xi 和 yi 1=i=n 求对于每个i 是否有一对xjyj符合yjyi 且 xi-xj的绝对值小于等于yj-yi请使用C++并注意到 n=100000你应当使用更快的搜索方法如二分查找。

原文地址: https://www.cveoy.top/t/topic/jc8g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录