# Hammered distance between N points in a 2-D plane

Given **n** number of point in 2-d plane followed by Xi, Yi describing n points. The task is to calculate the hammered distance of n points.

**Note:** Hammered distance is the sum of the square of the shortest distance between every pair of the point.

**Examples:**

Input: n = 3 0 1 0 0 1 0 Output: 4 Input: n = 4 1 0 2 0 3 0 4 0 Output: 20

**Basic Approach:**As we have to find out sum of square of shortest distance among all the pairs.So, we can take every possible pair and calculate the sum of square of distance.

// Pseudo code to find hammered-distance using above approach. //this will store hammered distance Distace=0 for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { //shortest distance between point i and j. Distance+=(x[i]-x[j])^2+(y[i]-y[j])^2 } }

Its time complexity will be O(n^2).

**Efficient Approach:** This problem can be solved in time complexity of O(N).

Below is the implementation of above approach:

## C++

`// C++ implementation of above approach ` `#include <bits/stdc++.h> ` `#define ll long long int ` `using` `namespace` `std; ` ` ` `// Function calculate cummalative sum ` `// of x, y, x^2, y^2 coordinates. ` `ll cumm(vector<ll>& x, vector<ll>& y, ` ` ` `vector<ll>& cummx, vector<ll>& cummy, ` ` ` `vector<ll>& cummx2, vector<ll>& cummy2, ll n) ` `{ ` ` ` `for` `(` `int` `i = 1; i <= n; i++) { ` ` ` `cummx[i] = cummx[i - 1] + x[i]; ` ` ` `cummy[i] = cummy[i - 1] + y[i]; ` ` ` `cummx2[i] = cummx2[i - 1] + x[i] * x[i]; ` ` ` `cummy2[i] = cummy2[i - 1] + y[i] * y[i]; ` ` ` `} ` `} ` ` ` `// Function ot calculate the hammered distance ` `int` `calHammeredDistance(` `int` `n, vector<ll>& x, vector<ll>& y) ` `{ ` ` ` `// cummx conatins cummulative sum of x ` ` ` `// cummy conatins cummulative sum of y ` ` ` `vector<ll> cummx(n + 1, 0), cummy(n + 1, 0); ` ` ` ` ` `// cummx2 conatins cummulative sum of x^2 ` ` ` `// cummy2 conatins cummulative sum of y^2 ` ` ` `vector<ll> cummx2(n + 1, 0), cummy2(n + 1, 0); ` ` ` ` ` `// calculate cummalative of x ` ` ` `//, y, x^2, y^2, because these terms ` ` ` `// required in formula to reduce complexity. ` ` ` ` ` `// this function calculate all required terms. ` ` ` `cumm(x, y, cummx, cummy, cummx2, cummy2, n); ` ` ` ` ` `// hdx calculate hammer distance for x coordinate ` ` ` `// hdy calculate hammer distance for y coordinate ` ` ` `ll hdx = 0, hdy = 0; ` ` ` ` ` `for` `(` `int` `i = 1; i <= n; i++) { ` ` ` ` ` `// came from formula describe in explanation ` ` ` `hdx += (i - 1) * x[i] * x[i] + cummx2[i - 1] ` ` ` `- 2 * x[i] * cummx[i - 1]; ` ` ` ` ` `// came from formula describe in explanation ` ` ` `hdy += (i - 1) * y[i] * y[i] + cummy2[i - 1] ` ` ` `- 2 * y[i] * cummy[i - 1]; ` ` ` `} ` ` ` ` ` `// total is the sum of both x and y. ` ` ` `ll total = hdx + hdy; ` ` ` `return` `total; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `// number of points ` ` ` `int` `n = 3; ` ` ` ` ` `// x contains the x coordinates ` ` ` `// y conatins the y coordinates ` ` ` `vector<ll> x(n + 1), y(n + 1); ` ` ` `x = { 0, 0, 1 }; ` ` ` `y = { 1, 0, 0 }; ` ` ` ` ` `cout << calHammeredDistance(n, x, y); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 implementation of the

# above approach

# Function calculate cummalative sum

# of x, y, x^2, y^2 coordinates.

def cumm(x, y, cummx, cummy,

cummx2, cummy2, n):

for i in range(1, n+1):

cummx[i] = cummx[i – 1] + x[i]

cummy[i] = cummy[i – 1] + y[i]

cummx2[i] = cummx2[i – 1] + x[i] * x[i]

cummy2[i] = cummy2[i – 1] + y[i] * y[i]

# Function ot calculate the

# hammered distance

def calHammeredDistance(n, x, y):

# cummx conatins cummulative sum of x

# cummy conatins cummulative sum of y

cummx = [0] * (n + 1)

cummy = [0] * (n + 1)

# cummx2 conatins cummulative sum of x^2

# cummy2 conatins cummulative sum of y^2

cummx2 = [0] * (n + 1)

cummy2 = [0] * (n + 1)

# calculate cumulative of x , y, x^2, y^2,

# because these terms are required in the

# formula to reduce complexity.

# This function calculate all required terms.

cumm(x, y, cummx, cummy, cummx2, cummy2, n)

# hdx calculate hammer distance for x coordinate

# hdy calculate hammer distance for y coordinate

hdx, hdy = 0, 0

for i in range(1, n + 1):

# came from formula describe in explanation

hdx += ((i – 1) * x[i] * x[i] + cummx2[i – 1] –

2 * x[i] * cummx[i – 1])

# came from formula describe in explanation

hdy += ((i – 1) * y[i] * y[i] + cummy2[i – 1] –

2 * y[i] * cummy[i – 1])

# total is the sum of both x and y.

total = hdx + hdy

return total

# Driver Code

if __name__ == “__main__”:

# number of points

n = 3

# x contains the x coordinates

# y conatins the y coordinates

x = [0, 0, 1, 0]

y = [1, 0, 0, 0]

print(calHammeredDistance(n, x, y))

# This code is contributed by Rituraj Jain

**Output:**

2

## Recommended Posts:

- Ways to choose three points with distance between the most distant points <= L
- Distance between a point and a Plane in 3 D
- Program to check whether 4 points in a 3-D plane are Coplanar
- Number of triangles in a plane if no more than two points are collinear
- Program to find equation of a plane passing through 3 points
- Shortest distance between a Line and a Point in a 3-D plane
- Program to calculate distance between two points in 3 D
- Program to calculate distance between two points
- Program for distance between two points on earth
- Check whether it is possible to join two points given on circle such that distance between them is k
- Find points at a given distance on a line of given slope
- Haversine formula to find distance between two points on a sphere
- Steps required to visit M points in order on a circular ring of N points
- Minimum number of points to be removed to get remaining points on one side of axis
- Count of obtuse angles in a circle with 'k' equidistant points between 2 given points

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.