CodeForces 660D Number of Parallelograms

题意:平面给你n个点,问能够组成多少个平行四边形

思路:能组成平行四边形的两条对边的向量一定是相等的,直接n^2把所有向量算出来就做完了


#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn = 2005;
map<pair<int,int>,int> ve;
pair<int,int>a[maxn];
int main()
{
    int n;
	scanf("%d",&n);
	for (int i = 1;i<=n;i++)
		scanf("%d%d",&a[i].first,&a[i].second);
	int ans = 0;
	for (int i = 1;i<=n;i++)
		for (int j = i+1;j<=n;j++)
		{
			pair<int,int>temp;
			temp.first = a[i].first-a[j].first;
			temp.second = a[i].second-a[j].second;
			if (temp.first<0)
				temp.first=-temp.first,temp.second=-temp.second;
			else if (temp.second<0 && temp.first==0)
				temp.second=-temp.second;
			ans+=ve[temp];
			ve[temp]++;
		}
	printf("%d\n",ans/2);
}

Description

You are given n points on a plane. All the points are distinct and no three of them lie on the same line. Find the number of parallelograms with the vertices at the given points.

Input

The first line of the input contains integer n (1 ≤ n ≤ 2000) — the number of points.

Each of the next n lines contains two integers (xi, yi) (0 ≤ xi, yi ≤ 109) — the coordinates of the i-th point.

Output

Print the only integer c — the number of parallelograms with the vertices at the given points.

Sample Input

Input
4
0 1
1 0
1 1
2 0
Output
1


你可能感兴趣的:(CodeForces 660D Number of Parallelograms)