用 C++ 统计二维空间中满足给定条件的三元组点对 (A, B, C)


给定二维空间中的 N 个点作为输入。目标是找到输入中满足以下条件的三元组点的数量:其中一点是另外两点连线的中点。例如,如果三元组是 (A,B,C),则 B 是 A 和 C 的中点(或 A、B、C 的任何其他组合)。

我们将通过将所有点作为 <int,int> 对插入向量来实现这一点。然后将该向量中的所有对添加到集合中。通过从集合中取两点,检查 (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

下面程序中使用的方案如下:

  • 我们使用一个 <int,int> 类型对的向量。

  • 每对包含 (x,y) 坐标。

  • 函数 mid_point(vector<pair<int, int>> vec, int size) 将向量及其大小作为输入,并返回满足中点条件的三元组数量。

  • 将初始变量 count 初始化为 0,用于统计此类三元组。

  • 将向量中的所有对插入到集合 <pair<int, int> > sets 中。它将包含所有唯一点。

  • 使用两个 for 循环遍历向量中的每对点。

  • 将两点的 x 坐标之和存储在整数 point_A 中,将两点的 y 坐标之和存储在整数 point_B 中。

  • 如果 point_A 和 point_B 中这两个和都是偶数,则检查中点条件。

  • 如果一对 (point_A/2,point_B/2) 作为对存在于集合中,则表示存在中点。递增三元组计数。

  • 最后,count 将包含三元组的数量。

  • 在 for 循环结束时返回 count 作为结果。

示例

 在线演示

#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

更新于:2020-10-31

241 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告