本题是寻找正方形,由数学知识可知,已经正方形的两个顶点坐标,即可求出其另外两个点坐标,具体代码如下
x = b[i] - b[j];
y = c[i] - c[j];
p = b[i] - y;
q = c[i] + x;
h = b[j] - y;
k = c[j] + x;
点(p,q),(h,k),(b[i],c[i]),(b[j],c[j])构成正方形
知道了这一步后,如果这两个点均存在的话,由勾股定理即可求出正方形面积。
下面附上代码
#include <iostream>
using namespace std;
int a[5005][5005], n,x,y,z,k,h,p,q,b[3005],c[3005],ans;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> x >> y;
b[i] = x;
c[i] = y;
a[x][y] = 1;
}
for(int i=1;i<=n;i++)
for (int j =1; j <= n; j++)
{
x = b[i] - b[j];
y = c[i] - c[j];
p = b[i] - y;
q = c[i] + x;
h = b[j] - y;
k = c[j] + x;
if (p < 1 || p>5000 || h < 1 || h>5000 || q < 1 || q>5000 || k < 1 || k>5000)
continue;
if (a[p][q] == 1 && a[h][k] == 1)
{
ans = max(ans, x * x + y * y);
}
}
cout << ans;
return 0;
}