# 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: 1
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: 0

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 ` `

Output:

```1
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.