画画 模拟

描述:

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;
}

猜你喜欢

转载自blog.csdn.net/shadandeajian/article/details/81489262