正方形已知两点对角线求另外两点(POJ2002)

至于为什么,上图。转载于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;
}
原文地址:https://www.cnblogs.com/iss-ue/p/12637368.html