描述:
durong拿起了apple pencil,开始在他的ipad上面学习画画。他随便画了很多个点,这时候他突然在想,这些点可以构成多少个矩形呢?
输入:
第一行一个整数n代表点的个数。
接下来n行每行两个整数x,y代表点的坐标。
n <= 1000
|x|, |y| <= 30000
输出:
输出一个整数,代表矩形的个数y
样例输入:
6 0 1 1 0 1 1 0 0 -1 0 0 -1
样例输出:
2
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1010;
pair<int, int> pii;
pair<pair<int, int>, int> piii;
map<pair<pair<int, int>, int>, int> mmap;
int X[maxn], Y[maxn];
int dis(int x1, int x2, int y1, int y2) {
return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
int main(void) {
int n,ans=0;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> X[i] >> Y[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j < i; j++) {
pii = make_pair(X[i]+X[j], Y[i]+Y[j]);//对角线上的两个点(x总,y总)
piii = make_pair(pii, dis(X[i],X[j],Y[i],Y[j]));//两个点距离相等
ans+=mmap[piii];//如果两条对角线上面的性质相等,则可以判断这两条对角线可以形成一个矩形
}
cout<<ans<<endl;
return 0;
}