对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线。

N*N地处理出所有线段,排序,对每一部分中点重合、长度相等的线段进行暴力枚举,更新答案。

用 long double 注意EPS的设置,卡精度。

注意数组大小的设置,容易MLE。

 #include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
#define EPS 0.000000000000001
#define N 1501
typedef long long ll;
typedef long double llf;
llf sqr(const llf &x){return x*x;}
struct Point
{
llf x,y;
Point(const llf &a,const llf &b){x=a;y=b;}
Point(){}
void Read(){cin>>x>>y;}
};
typedef Point Vector;
struct Line
{
Point l,r,m; llf len;
Line(const Point &a,const Point &b){l=a;r=b;}
Line(){}
void Init(){m=Point((l.x+r.x)/2.0,(l.y+r.y)/2.0);len=sqrt(sqr(l.x-r.x)+sqr(l.y-r.y));}
};
bool Equal(const llf &a,const llf &b){return fabs(a-b)<EPS ? : ;}
bool Less(const llf &a,const llf &b){return a-b<(-EPS) ? : ;}
bool LeEqu(const llf &a,const llf &b){return a-b<EPS ? : ;}
bool operator < (const Point &a,const Point &b)
{return (!Equal(a.x,b.x))?Less(a.x,b.x):Less(a.y,b.y);}
bool operator == (const Point &a,const Point &b)
{return (Equal(a.x,b.x)&&Equal(a.y,b.y)) ? : ;}
bool operator != (const Point &a,const Point &b){return a==b ? : ;}
bool operator < (const Line &a,const Line &b)
{return a.m!=b.m ? a.m<b.m : Less(a.len,b.len);}
bool operator == (const Line &a,const Line &b)
{return (Equal(a.len,b.len)&&a.m==b.m) ? : ;}
bool operator != (const Line &a,const Line &b){return a==b ? : ;}
Vector operator - (const Point &a,const Point &b){return Vector(a.x-b.x,a.y-b.y);}
llf Cross(const Vector &a,const Vector &b){return a.x*b.y-a.y*b.x;}
int n,m,head;
Point p[N];
llf ans;
Line lines[N*N>>];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) p[i].Read();
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(p[i]!=p[j])
{
lines[++m]=Line(p[i],p[j]);
lines[m].Init();
}
sort(lines+,lines+m+);
for(int i=;i<=m;i++)
{
if(lines[i]!=lines[i-]) head=i;
if(lines[i]!=lines[i+])
if(i-head)
{
for(int j=head;j<=i;j++)
for(int k=j+;k<=i;k++)
ans=max(ans,fabs(Cross(lines[j].l-lines[j].m,lines[k].l-lines[k].m))
+fabs(Cross(lines[j].l-lines[j].m,lines[k].r-lines[k].m)));
}
}
printf("%lld\n",(ll)ans);
return ;
}

【计算几何】bzoj2338 [HNOI2011]数矩形的更多相关文章

  1. bzoj2338[HNOI2011]数矩形 计算几何

    2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1535  Solved: 693[Submit][Status ...

  2. BZOJ2338: [HNOI2011]数矩形

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2338 中学数学老师告诉我们,一个矩形的两条对角线相等,所以只要把所有的边拿出来,记录下中点坐标 ...

  3. {bzoj2338 [HNOI2011]数矩形 && NBUT 1453 LeBlanc}平面内找最大矩形

    思路: 枚举3个点,计算第4个点并判断是否存在,复杂度为O(N3logN)或O(N3α) 考虑矩形的对角线,两条对角线可以构成一个矩形,它们的长度和中点必须完全一样,于是将所有线段按长度和中点排序,那 ...

  4. bzoj-2338 2338: [HNOI2011]数矩形(计算几何)

    题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MB Description Input   Output 题意: 思路 ...

  5. 【BZOJ2338】[HNOI2011]数矩形 几何

    [BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两 ...

  6. 【题解】Luogu P3217 [HNOI2011]数矩形

    原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...

  7. luogu P3217 [HNOI2011]数矩形

    LINK:数矩形 题意:给出n个点 求出一个最大的矩形. 矩形可以使斜着的.(不会告诉你样例我算了几年 这道题的一个潜规则 矩形面积都是整数 我也不知道为啥一定是整数 姑且是题目输出的要求吧. 所以用 ...

  8. 【bzoj2338】[HNOI2011]数矩形 计算几何

    题目描述 题解 计算几何 由于对角线平分且相等的四边形是矩形,因此我们可以把每条对角线存起来,按照对角线长度和中点位置为关键字排序,这样对于每个相同长度和中点的对角线就排到了一起. 于是对于每段可能形 ...

  9. BZOJ 2338 HNOI2011 数矩形 计算几何

    题目大意:给定n个点,求一个最大的矩形,该矩形的四个顶点在给定的点上 找矩形的方法是记录全部线段 若两条线段长度相等且中点重合 这两条线段就能够成为矩形的对角线 于是我们找到全部n*(n-1)/2条线 ...

随机推荐

  1. WCF分布式开发步步为赢(14):WCF安全编程--基本概念

    WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好地理解WCF安全相关知识,我把WCF安全机制主要知识点整理 ...

  2. 安卓tablayout控件的使用

    1.加载依赖 api "com.android.support:design:26.1.0" 2.布局 <android.support.design.widget.TabL ...

  3. mysql删除id最小的条目

    DELETE FROM 表1 WHERE Mid in (select Mid from (SELECT Min(Mid) Mid FROM 表1 c1) t1);

  4. vue相对路径修改

    如果静态文件不是部署在网站根目录下,vue-cli将给你造成巨大的麻烦. 你不能直接把build好的文件抛进一个目录.你不能直接在本地打开用vue做好的静态网站. 改成相对路径,主要需要做两步. 1. ...

  5. 前端面试:提升web性能

    1,减少HTTP请求数 A,从设计实现层简化页面 B,合理设置HTTP缓存 C,资源合并与压缩.如果可以的话,尽可能的将外部脚本,央视进行合并,多个合为一,css,javascript,image都可 ...

  6. 转:深入理解javascript原型和闭包系列

    转自:深入理解javascript原型和闭包系列 从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然 ...

  7. java web标签

    一:国庆结束了,回来上班,结果老大说过两天才出差,所以这两天就用来补自己不太懂的知识或者以前没有熟悉的知识,jsp的标签就是,因为在项目中自己封装了一些标签,但是我自己只是会用,真正的原理性的东西我还 ...

  8. nginx的常规配置

    程序员们,在北上广你还能买房吗? >>>   nginx的常规配置 nginx的使用非常简单,只需要配置好我们需要的各种指令,就能跑起来.如果你需要添加模块,还需要添加模块方面的配 ...

  9. 【CodeForces】841C. Leha and Function(Codeforces Round #429 (Div. 2))

    [题意]定义函数F(n,k)为1~n的集合中选择k个数字,其中最小数字的期望. 给定两个数字集A,B,A中任意数字>=B中任意数字,要求重组A使得对于i=1~n,sigma(F(Ai,Bi))最 ...

  10. bzoj 1061 志愿者招募 费用流

    详见BYV的博客,写的非常全面https://www.byvoid.com/blog/noi-2008-employee /************************************** ...