至于为什么,上图。转载于MZW_BG
枚举正方形的一条边,此时有上正方形和下正方形。
最后正方形个数/4,因为每个正方形被枚举了4条边
#include <bits/stdc++.h>
using namespace std;
int x[509],y[509],vis[200][200];
bool ok(int x,int y)
{
if(x<-50||x>50||y<-50||y>50) return false;
if(vis[x+50][y+50]==0) return false;
return true;
}
int check(int i,int j)
{
int lenx=x[i]-x[j],leny=y[i]-y[j],num=0;
//正方形面积为lenx*lenx+leny*leny
if(ok(x[i]+leny,y[i]-lenx)&&ok(x[j]+leny,y[j]-lenx)) num++;
if(ok(x[i]-leny,y[i]+lenx)&&ok(x[j]-leny,y[j]+lenx)) num++;
return num;
}
int main()
{
int n,ans;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
vis[x[i]+50][y[i]+50]=1;//防止负数下标
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
ans+=check(i,j);
cout<<ans/4;
}