Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Line Reflection - Kiểm tra đối xứng qua đường thẳng song song trục Y


Cho n điểm trên mặt phẳng 2D. Kiểm tra xem có đường thẳng song song trục Y (dạng x = c) sao cho tập điểm sau khi phản chiếu qua đường thẳng đó không thay đổi.

Ví dụ: points = [[1,1],[-1,1]] → true (đường đối xứng là x = 0).

Giải thuật

Tìm minX và maxX của tất cả điểm. Đường đối xứng (nếu có) phải là x = (minX + maxX) / 2. Tức mid = minX + maxX. Với mỗi điểm (x, y), điểm đối xứng là (mid - x, y). Kiểm tra xem điểm đối xứng có trong tập gốc không (dùng set).

Cài đặt C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool isReflected(vector<vector<int>>& points) {
        set<vector<int>> pointSet;
        int n = points.size();
        int minVal = INT_MAX, maxVal = INT_MIN;

        for (int i = 0; i < n; i++) {
            minVal = min(minVal, points[i][0]);
            maxVal = max(maxVal, points[i][0]);
            pointSet.insert(points[i]);
        }

        int mid = maxVal + minVal;
        for (int i = 0; i < n; i++) {
            int x = points[i][0];
            int y = points[i][1];
            x = mid - x;
            if (!pointSet.count({x, y}))
                return false;
        }
        return true;
    }
};

int main() {
    Solution ob;
    vector<vector<int>> v = {{1,1},{-1,1}};
    cout << ob.isReflected(v);
    return 0;
}

Đầu vào

{{1,1},{-1,1}}

Đầu ra

1