记录编号 409824 评测结果 AAAAAAAAAA
题目名称 [HNOI 2011] 数矩形 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 4.536 s
提交时间 2017-05-29 15:26:31 内存使用 26.41 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<pii,ll> pt;
const int N=1510;
pii operator + (const pii &a,const pii &b){
	return pii(a.first+b.first,a.second+b.second);
}
pii operator - (const pii &a,const pii &b){
	return pii(a.first-b.first,a.second-b.second);
}
ll operator * (const pii &a,const pii &b){
	return abs((ll)a.first*b.second-(ll)a.second*b.first);
}
ll sqr(int x){return (ll)x*x;}
ll dis(pii a){return sqr(a.first)+sqr(a.second);}
int n,id;pii p[N];
map<pt,int> M;
vector<pii> v[N*N];
int main()
{
	freopen("crectangle.in","r",stdin);
	freopen("crectangle.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d%d",&p[i].first,&p[i].second);
	for (int i=1;i<=n;i++)
	for (int j=1;j<i;j++){
		pii pos=p[i]+p[j];
		pt now(pos,dis(p[i]-p[j]));
		int ID=M[now];
		if (!ID) M[now]=ID=++id;
		v[ID].push_back(p[i]-p[j]);
	}
	ll ans=0;
	for (int ID=1;ID<=id;ID++)
	for (int i=0;i<v[ID].size();i++)
	for (int j=0;j<i;j++)
		ans=max(ans,v[ID][i]*v[ID][j]);
	printf("%lld\n",ans>>1);
	return 0;
}