很久很久以前有一座寺庙,从上往下看寺庙的形状正好是一个正方形,由4个角上竖立的圆柱搭建而成。现在圆柱都倒塌了,只在地上留下圆形的痕迹,可是现在地上有很多这样的痕迹,专家说的一定是最大的那个。
现在给出圆柱的坐标,找出由4个圆柱构成的最大的正方形,并计算出最大的面积。注意正方形的边不一定平行于坐标。
例如如图有10根柱子,其中(4,2),(5,2)(5,3)(4,3)可以形成一个正方形,
(1,1)(4,0)(5,3)(2,4)也可以,后者是其中最大的,面积为10.
第1行:包含一个整数N(1<=N<=3000),表示柱子的数量。
接下来N行,没行有两个用空格隔开的整数,表示柱子的坐标(坐标值在0到5000之间),柱子的位置互不相同。
如果存在正方形,输出最大的面积,否则输出0
10
9 4
4 3
1 1
4 2
2 4
5 8
4 0
5 3
0 5
5 2
10
运行时错误
#include<bits/stdc++.h>
using namespace std;
int t[5005][5005];
pair<int,int> zz[3005];
int a,b,c,d;
int main()
{
cin>>a;
for(int i=1;i<=a;i=i+1)
{
cin>>zz[i].first>>zz[i].second;
t[zz[i].first][zz[i].second]=1;
}
sort(zz+1,zz+a+1);
for(int i=1;i<=a;i=i+1)
{
for(int j=1;j<=i;j=j+1)
{
if(i==j)
{
break;
}
//cout<<zz[i].first<<" "<<zz[i].second<<endl<<zz[j].first<<" "<<zz[j].second<<endl<<endl;
int h=abs(zz[i].first-zz[j].first),z=abs(zz[i].second-zz[j].second);
if(t[zz[i].first-z][zz[i].second+h]==1 && t[zz[j].first-z][zz[j].second+h]==1)
{
cout<<(h+z)*(h+z)-h*z*2;
return 0;
}
if(t[zz[i].first+z][zz[i].second-h]==1 && t[zz[j].first+z][zz[j].second-h]==1)
{
cout<<(h+z)*(h+z)-h*z*2;
return 0;
}
}
}
return 0;
}