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

C++에서 주어진 조건을 만족하는 2차원 공간에서 점의 삼중항 쌍(A, B, C)을 센다.

<시간/>

2차원 공간에서 N개의 점을 입력받습니다. 목표는 한 점이 다른 두 점 사이의 선에서 중간 점이 되도록 입력에서 점의 세 쌍의 수를 찾는 것입니다. 즉, 삼중항이 (A,B,C)이면 B는 A와 C의 중간점입니다(또는 A,B,C의 다른 조합).

모든 점을 쌍으로 벡터에 삽입하여 이를 수행합니다. 그런 다음 이 벡터의 모든 쌍을 집합에 추가합니다. 집합에서 두 점을 취하여 (x,y) 좌표의 합을 2로 나눈 값이 같은 집합에 있는지 확인합니다. 그렇다면 트리플렛 카운트를 증가시키십시오.

예를 들어 이해합시다.

입력

{ 1,2 }, { 4,2} , { 2,1 } , { 7,2 } N=4 pairs

출력

Count of triplet pairs that satisfy the given condition are: 1

설명

Here {4,2} is mid-point between {1,2} and {7,2}. Only 1 such triplet

입력

{ 1,2 }, { 4,2} , { 2,1 } , { 5,2 }, { 8,1} , {1,1} N=6

출력

Count of triplet pairs that satisfy the given condition are: 1

설명

No such triplet exist

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 유형의 쌍으로 구성된 벡터를 사용합니다.

  • 각 쌍은 (x,y) 좌표를 포함합니다.

  • 함수 mid_point(vector> vec, int size) 는 벡터와 크기를 입력으로 받아 중간점 조건을 만족하는 트리플렛의 수를 반환합니다.

  • 이러한 삼중항의 경우 초기 변수 개수를 0으로 간주합니다.

  • 벡터의 모든 쌍을 set> 세트에 삽입합니다. 모든 고유 포인트가 있습니다.

  • 각 점 쌍에 대해 두 개의 for 루프를 사용하여 벡터를 탐색합니다.

  • 두 점의 x 좌표의 합을 정수 point_A에 저장하고 두 점의 y 좌표의 합을 정수 point_B에 저장합니다.

  • point_A와 point_B의 합이 모두 짝수이면 중간점 조건을 확인하십시오.

  • pair(point_A/2,point_B/2)가 set에 pair로 존재하면 중간점이 존재함을 의미한다. 트리플렛의 증분 수.

  • 결국 카운트에는 세 개의 숫자가 있습니다.

  • for 루프의 끝에서 결과로 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int mid_point(vector<pair<int, int>> vec, int size){
   int count = 0;
   set<pair<int, int> > sets;
   for (int i = 0; i < size; i++){
      sets.insert(vec[i]);
   }
   for (int i = 0; i < size; i++){
      for (int j = i + 1; j < size; j++){
         int point_A = vec[i].first + vec[j].first;
         int point_B = vec[i].second + vec[j].second;
         if (point_A % 2 == 0 && point_B % 2 == 0){
            if (sets.find(make_pair(point_A / 2, point_B / 2)) != sets.end()){
               count++;
            }
         }
      }
   }
   return count;
}
int main(){
   vector<pair<int, int>> vec = { { 9, 2 }, { 5, 2 }, { 1, 2 } };
   int size = vec.size();
   cout<<"Count of triplet pairs (A, B, C) of points in 2-D space that satisfy the given condition are: "<<mid_point(vec, size);
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of triplet pairs (A, B, C) of points in 2-D space that satisfy the given condition are: 1