您的位置:首页 > 其它

bzoj 2338: [HNOI2011]数矩形

2014-10-22 21:42 423 查看

Description



计算几何。枚举边,长度和中点都相同即可构成矩形,差积计算面积即可
#include<cstdio>
#include<algorithm>
using namespace std;
int p;
struct point
{
long long x,y;
}a[1501];
struct line
{
long long x1,y1,x2,y2;
long long xx,yy;
long long x,y;
long long len;
}l[2550000/2+1];
inline bool cmp(line x,line y)
{
if(x.len<y.len)
return true;
if(x.len==y.len&&x.x<y.x)
return true;
if(x.len==y.len&&x.x==y.x&&x.y<y.y)
return true;
return false;
}
inline long long xabs(long long x)
{
if(x<0)
x=-x;
return x;
}
inline long long max(long long x,long long y)
{
if(x>y)
return x;
return y;
}
int main()
{
int n;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)
scanf("%lld%lld",&a[i].x,&a[i].y);
for(i=1;i<=n-1;i++)
{
for(j=i+1;j<=n;j++)
{
p++;
//       if(a[i].x<a[j].x)
//     {
l[p].x1=a[i].x;
l[p].y1=a[i].y;
l[p].x2=a[j].x;
l[p].y2=a[j].y;
//   }
/*  else
{
l[p].x1=a[j].x;
l[p].y1=a[j].y;
l[p].x2=a[i].x;
l[p].y2=a[i].y;
}*/
l[p].xx=l[p].x2-l[p].x1;
l[p].yy=l[p].y2-l[p].y1;
l[p].x=a[i].x+a[j].x;
l[p].y=a[i].y+a[j].y;
l[p].len=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
}
}
sort(l+1,l+1+p,cmp);
long long ans=0;
for(i=2;i<=p;i++)
{
j=i-1;
long long t;
while(l[i].len==l[j].len&&l[i].x==l[j].x&&l[i].y==l[j].y&&j>0)
{
t=(l[i].xx*l[j].yy)-(l[j].xx*l[i].yy);
ans=max(ans,xabs(t));
j--;
}
}
printf("%lld\n",ans/(long long)2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: