Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 라인 리플렉션

<시간/>

2D 평면에 n개의 점이 있다고 가정하면 y축에 평행한 선이 주어진 점을 대칭적으로 반영하는지 확인해야 합니다. 즉, 주어진 선 위에 모든 점을 반사한 후 원래 점의 집합은 반영된 점과 동일합니다.

따라서 입력이 점 =[[1,1],[-1,1]]

와 같은 경우

C++의 라인 리플렉션

그러면 출력이 true가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 한 세트를 정의하십시오.

  • n :=포인트 크기

  • minVal :=inf

  • maxVal :=-inf

  • initialize i :=0의 경우, i

    • minVal :=minVal 및 포인트의 최소값[i, 0]

    • maxVal :=maxVal 및 포인트의 최대값[i, 0]

    • ok

      에 점[i] 삽입
  • mid :=maxVal + minVal

  • initialize i :=0의 경우, i

    • x :=포인트[i, 0]

    • y :=포인트[i, 1]

    • x :=중간 - x

    • { x, y }가 정상이 아니면 -

      • 거짓을 반환

  • true를 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#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));
}

입력

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

출력

1