站外题求助(玄关)
  • 板块灌水区
  • 楼主ssjs2023scy
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/18 16:32
  • 上次更新2025/1/18 19:23:43
查看原帖
站外题求助(玄关)
1404259
ssjs2023scy楼主2025/1/18 16:32

描述

很久很久以前有一座寺庙,从上往下看寺庙的形状正好是一个正方形,由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;
}
2025/1/18 16:32
加载中...