Computer >> Máy Tính >  >> Lập trình >> C ++

Phản chiếu dòng trong C ++

Giả sử chúng ta có n điểm trên mặt phẳng 2D, chúng ta phải kiểm tra xem có đường thẳng nào song song với trục y phản ánh đối xứng các điểm đã cho hay không, hay nói cách khác là kiểm tra xem có tồn tại một đường thẳng mà sau khi phản chiếu tất cả các điểm trên đường thẳng đã cho hay không. tập hợp các điểm ban đầu giống với các điểm được phản ánh.

Vì vậy, nếu đầu vào giống như point =[[1,1], [- 1,1]]

Phản chiếu dòng trong C ++

thì đầu ra sẽ là true

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một tập hợp ok

  • n:=kích thước của điểm

  • minVal:=inf

  • maxVal:=-inf

  • để khởi tạo i:=0, khi i

    • minVal:=tối thiểu minVal và điểm [i, 0]

    • maxVal:=tối đa của maxVal và điểm [i, 0]

    • chèn điểm [i] vào ok

  • giữa:=maxVal + minVal

  • để khởi tạo i:=0, khi i

    • x:=điểm [i, 0]

    • y:=điểm [i, 1]

    • x:=mid - x

    • nếu {x, y} không ổn, thì -

      • trả về false

  • trả về true

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isReflected(vector<vector<int<>& points) {
      set<vector<int< > ok;
      int n = points.size();
      int minVal = INT_MAX;
      int maxVal = INT_MIN;
      for (int i = 0; i < n; i++) {
         minVal = min(minVal, points[i][0]);
         maxVal = max(maxVal, points[i][0]);
         ok.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 (!ok.count({ x, y }))
            return false;
      }
      return true;
   }
};
main(){
   Solution ob;
   vector<vector<int<> v = {{1,1},{-1,1}};
   cout << (ob.isReflected(v));
}

Đầu vào

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

Đầu ra

1