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

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. HDU1054 Strategic Game(最小点覆盖)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. linux crontab执行shell脚本中包含相对路径的问题

    实例一 test.sh文件 echo `date`>test.log 配置crontab 设置 */1 * * * * sh /data/test.sh 在/data/目录下,未找到test.l ...

  3. React 使用 fetch 请求天气

    中国天气网(http://www.weather.com.cn)提供了查询天气的 API,通过传入城市 id, 可以获得当前城市的天气信息,API 相关信息如下: 规格  描述 主机地址 http:/ ...

  4. cxf+spring发布webservice和调用

    maven项目配置http://cxf.apache.org/docs/using-cxf-with-maven.html <properties> <cxf.version> ...

  5. BootStrap弹出框插件popover简单实例

    1.网上实例地址 http://www.runoob.com/bootstrap/bootstrap-popover-plugin.html 2.具体demo     $("#pieId&q ...

  6. 网络(bzoj 4538)

    Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服 ...

  7. 【BZOJ2286】【SDOI2011】消耗战 [虚树][树形DP]

    消耗战 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 在一场战争中,战场由n个岛屿和n-1 ...

  8. 计算n阶行列式的模板

    之前在学习计数问题的时候也在网上找了很多关于行列式的资料 但是发现很多地方都只介绍2\3阶的情况 一些论文介绍的方法又看不懂 然后就一直耽搁着 今天恰好出到这样的题目 发现标算的代码简介明了 还挺开心 ...

  9. Linux : 多线程下载工具: axel

    wget 应该是最常用的下载工具了,但是其不支持多线程下载. axel 安装 epel 源有 axel 的二进制包,可以使用 yum 安装. yum install epel-release yum ...

  10. Linux 工作站安全加固规范

    目标受众 这是一套 Linux 基金会为其系统管理员提供的推荐规范. 这个文档用于帮助那些使用 Linux 工作站来访问和管理项目的 IT 设施的系统管理员团队. 如果你的系统管理员是远程员工,你也许 ...