GFG App
Open App
Browser
Continue

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

Given N points in 2 dimensional space. The task is to count the number of triplets pairs (A, B, C) such that point B is the midpoint of line segment formed by joining points A and C.
Examples:

Input: points = {{1, 1}, {2, 2}, {3, 3}}
Output:
The point (2, 2) is the midpoint of the line segment joining points (1, 1) and (3, 3).
Input: points = {{1, 1}, {1, 2}, {1, 5}}
Output:

Approach: Consider a pair of points A and C. The midpoint of the line segment joining these points will be ((A * X + C * X) / 2, (A * Y + C * Y) / 2)). If the point is present in the given list of points, we have found a triplet. To quickly check if a point is in our list of points we can use a set. Doing this for all pairs of points will give us the required count.
Below is the implementation of the above approach:

C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to return the count of possible triplets` `int` `countTriplets(``int` `n, vector > points)` `{` `    ``set > pts;` `    ``int` `ct = 0;`   `    ``// Insert all the points in a set` `    ``for` `(``int` `i = 0; i < n; i++)` `        ``pts.insert(points[i]);`   `    ``for` `(``int` `i = 0; i < n; i++)` `        ``for` `(``int` `j = i + 1; j < n; j++) {` `            ``int` `x = points[i].first + points[j].first;` `            ``int` `y = points[i].second + points[j].second;`   `            ``// If the mid point exists in the set` `            ``if` `(x % 2 == 0 && y % 2 == 0)` `                ``if` `(pts.find(make_pair(x / 2, y / 2))` `                    ``!= pts.end())` `                    ``ct++;` `        ``}`   `    ``// Return the count of valid triplets` `    ``return` `ct;` `}`   `// Driver code` `int` `main()` `{` `    ``vector > points` `        ``= { { 1, 1 }, { 2, 2 }, { 3, 3 } };` `    ``int` `n = points.size();` `    ``cout << countTriplets(n, points);` `}`

Java

 `// Java implementation of the approach` `import` `java.util.*;`   `class` `GFG` `{` `    `  `static` `class` `pair` `{` `    ``int` `first,second;`   `    ``public` `pair(``int` `first, ``int` `second) ` `    ``{` `        ``this``.first = first;` `        ``this``.second = second;` `    ``}` `    `  `}`   `// Function to return the count of possible triplets` `static` `int` `countTriplets(``int` `n, Vector points)` `{` `    ``Set pts = ``new` `HashSet();` `    ``int` `ct = ``0``;`   `    ``// Insert all the points in a set` `    ``for` `(``int` `i = ``0``; i < n; i++)` `        ``pts.add(points.get(i));`   `    ``for` `(``int` `i = ``0``; i < n; i++)` `        ``for` `(``int` `j = i + ``1``; j < n; j++) ` `        ``{` `            ``int` `x = points.get(i).first + points.get(j).first;` `            ``int` `y = points.get(i).second + points.get(j).second;`   `            ``// If the mid point exists in the set` `            ``if` `(x % ``2` `== ``0` `&& y % ``2` `== ``0``)` `                ``if` `(!pts.contains(``new` `pair(x / ``2``, y / ``2``)))` `                    ``ct++;` `        ``}`   `    ``// Return the count of valid triplets` `    ``return` `ct;` `}`   `// Driver code` `public` `static` `void` `main(String args[]) ` `{` `    ``Vector points = ``new` `Vector<>();` `    ``points.add(``new` `pair(``1``,``1``));` `    ``points.add(``new` `pair(``2``,``2``));` `    ``points.add(``new` `pair(``3``,``3``));` `    ``int` `n = points.size();` `    ``System.out.println(countTriplets(n, points));` `}` `}`   `// This code is contributed by Princi Singh`

Python3

 `# Python3 implementation of the approach `   `# Function to return the count ` `# of possible triplets ` `def` `countTriplets(n, points) :` `    `  `    ``pts ``=` `[] ` `    ``ct ``=` `0``; `   `    ``# Insert all the points in a set ` `    ``for` `i ``in` `range``(n) :` `        ``pts.append(points[i]); `   `    ``for` `i ``in` `range``(n) :` `        ``for` `j ``in` `range``(i ``+` `1``, n) : ` `            ``x ``=` `points[i][``0``] ``+` `points[j][``0``]; ` `            ``y ``=` `points[i][``1``] ``+` `points[j][``1``]; `   `            ``# If the mid point exists in the set ` `            ``if` `(x ``%` `2` `=``=` `0` `and` `y ``%` `2` `=``=` `0``) :` `                ``if` `[x ``/``/` `2``, y ``/``/` `2``] ``in` `pts :` `                    ``ct ``+``=` `1` `                    `  `    ``# Return the count of valid triplets ` `    ``return` `ct `   `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `:` `    `  `    ``points ``=` `[[ ``1``, ``1` `], [ ``2``, ``2` `], [ ``3``, ``3` `]]` `    ``n ``=` `len``(points) ` `    ``print``(countTriplets(n, points))`   `# This code is contributed by Ryuga`

C#

 `// C# implementation of the approach` `using` `System; ` `using` `System.Collections.Generic; `   `class` `GFG` `{` `    `  `public` `class` `pair` `{` `    ``public` `int` `first,second;`   `    ``public` `pair(``int` `first, ``int` `second) ` `    ``{` `        ``this``.first = first;` `        ``this``.second = second;` `    ``}` `    `  `}`   `// Function to return the count of possible triplets` `static` `int` `countTriplets(``int` `n, List points)` `{` `    ``HashSet pts = ``new` `HashSet();` `    ``int` `ct = 0;`   `    ``// Insert all the points in a set` `    ``for` `(``int` `i = 0; i < n; i++)` `        ``pts.Add(points[i]);`   `    ``for` `(``int` `i = 0; i < n; i++)` `        ``for` `(``int` `j = i + 1; j < n; j++) ` `        ``{` `            ``int` `x = points[i].first + points[j].first;` `            ``int` `y = points[i].second + points[j].second;`   `            ``// If the mid point exists in the set` `            ``if` `(x % 2 == 0 && y % 2 == 0)` `                ``if` `(!pts.Contains(``new` `pair(x / 2, y / 2)))` `                    ``ct++;` `        ``}`   `    ``// Return the count of valid triplets` `    ``return` `ct;` `}`   `// Driver code` `public` `static` `void` `Main(String []args) ` `{` `    ``List points = ``new` `List();` `    ``points.Add(``new` `pair(1, 1));` `    ``points.Add(``new` `pair(2, 2));` `    ``points.Add(``new` `pair(3, 3));` `    ``int` `n = points.Count;` `    ``Console.WriteLine(countTriplets(n, points));` `}` `}`   `// This code is contributed by 29AjayKumar`

PHP

 ``

Javascript

 ``

Output:

`1`

Time Complexity: O(N2 logN), where N represents the size of the given vector.
Auxiliary Space: O(N), where N represents the size of the given vector.

My Personal Notes arrow_drop_up