正方形计数 count
【问题描述】给定平面上N个点,你需要计算以其中4个点为顶点的正方形的个数。
注意:这里的正方形边不一定需要和坐标轴平行。
【输入格式】
输入文件中仅一行为一个整数N。
接下来的N行,每行有两个整数xi,yi,分别表示N个点的坐标。
【输出格式】
输出文件中仅一行为一个整数,即正方形的个数。
【输入输出样例】
输入:
7
0 0
0 1
1 0
1 1
1 2
2 1
2 2
输出:
3
【数据范围】
对于20%的数据,满足:1<=N<=20;
对于100%的数据,满足:1<=N<=500,-50<=X[i],Y[i]<=50,点不会重叠
在一个正方形中,给定两个节点的坐标与它们的相对位置后,另外两个节点的坐标就固定了,我们利用这个性质来进行穷举,题目数据范围不大,不会超时,并且程序中使用记忆化机制进行限制。代码中的坐标用pair数组和bool数组进行双重存储,代码如下
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
pair<int,int>node[501];
bool vis[501][501];
bool nodesquare[101][101];
int n;
struct dbnode
{
int x1,y1;
int x2,y2;
};
dbnode makesquare(int xx1,int yy1,int xx2,int yy2)
{
int a=xx1-xx2;
int b=yy2-yy1;
dbnode ans;