C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で指定された条件を満たす、2次元空間内の点のトリプレットペア(A、B、C)をカウントします。


2次元空間上のN点の入力が与えられます。目標は、1つのポイントが他の2つの間の線の中間点になるように、入力からポイントのトリプレットの数を見つけることです。つまり、トリプレットが(A、B、C)の場合、BはAとC(またはA、B、Cの他の任意の組み合わせ)の中点です。

これを行うには、すべてのポイントをペアとしてベクトルに挿入します。次に、このベクトルのすべてのペアをセットに追加します。セットから2つのポイントを取得することにより、(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>セットに挿入します。すべてのユニークなポイントがあります。

  • ポイントの各ペアに対して2つのforループを使用してベクトルをトラバースします。

  • 両方のポイントのx座標の合計を整数point_Aに格納し、両方のポイントのy座標の合計を整数point_Bに格納します。

  • point_Aとpoint_Bの両方の合計が偶数の場合は、中間点の状態を確認してください。

  • ペア(point_A / 2、point_B / 2)がセット内のペアとして存在する場合、中間点が存在することを意味します。トリプレットのインクリメントカウント。

  • 最終的に、カウントにはトリプレットの数が含まれます。

  • 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

  1. C++で指定された条件を満たすサブセットをカウントします

    数値の配列と整数xを入力として指定します。目標は、arr []のすべてのサブセットを見つけて、そのセットの個々の要素とそれらの合計をxで完全に割り切れるようにすることです。 例 入力 arr[] = {1,2,3,4,5,6} x=3 出力 Count of subsets that satisfy the given condition :3 説明 The subsets will be: [3], [6], [3,6] 入力 arr[] = {1,2,3,4,5,6} x=4 出力 Count of subsets that satisfy the given condition :1

  2. C++のグリッドで指定された方向に可能な移動をカウントします

    サイズnxmのグリッドと開始点x、yを表す2つの変数nとmです。 また、移動((1,1)、(2,2))などとしてグリッド内を移動するために実行できるステップ/移動のペアも指定されます。移動の各ペアは、x、y軸で実行されるステップの単位を表します。目標は、境界[1、n] X [1、m]内のグリッド内をトラバースするために実行できる合計ステップを見つけることです。nが5、mが4、現在の位置が2、2で、選択されたステップが( 1、-1)次に、このステップを1回実行すると、(3,1)になります。このステップを再度実行すると、(4、-1)になります。これは、-1が範囲外であるため無効です。 例