【计算几何】bzoj2338 [HNOI2011]数矩形
对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线。
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]数矩形的更多相关文章
- bzoj2338[HNOI2011]数矩形 计算几何
2338: [HNOI2011]数矩形 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1535 Solved: 693[Submit][Status ...
- BZOJ2338: [HNOI2011]数矩形
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2338 中学数学老师告诉我们,一个矩形的两条对角线相等,所以只要把所有的边拿出来,记录下中点坐标 ...
- {bzoj2338 [HNOI2011]数矩形 && NBUT 1453 LeBlanc}平面内找最大矩形
思路: 枚举3个点,计算第4个点并判断是否存在,复杂度为O(N3logN)或O(N3α) 考虑矩形的对角线,两条对角线可以构成一个矩形,它们的长度和中点必须完全一样,于是将所有线段按长度和中点排序,那 ...
- bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec Memory Limit: 128 MB Description Input Output 题意: 思路 ...
- 【BZOJ2338】[HNOI2011]数矩形 几何
[BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两 ...
- 【题解】Luogu P3217 [HNOI2011]数矩形
原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...
- luogu P3217 [HNOI2011]数矩形
LINK:数矩形 题意:给出n个点 求出一个最大的矩形. 矩形可以使斜着的.(不会告诉你样例我算了几年 这道题的一个潜规则 矩形面积都是整数 我也不知道为啥一定是整数 姑且是题目输出的要求吧. 所以用 ...
- 【bzoj2338】[HNOI2011]数矩形 计算几何
题目描述 题解 计算几何 由于对角线平分且相等的四边形是矩形,因此我们可以把每条对角线存起来,按照对角线长度和中点位置为关键字排序,这样对于每个相同长度和中点的对角线就排到了一起. 于是对于每段可能形 ...
- BZOJ 2338 HNOI2011 数矩形 计算几何
题目大意:给定n个点,求一个最大的矩形,该矩形的四个顶点在给定的点上 找矩形的方法是记录全部线段 若两条线段长度相等且中点重合 这两条线段就能够成为矩形的对角线 于是我们找到全部n*(n-1)/2条线 ...
随机推荐
- Different Integers 牛客多校第一场只会签到题
Given a sequence of integers a1, a2, ..., an and q pairs of integers (l1, r1), (l2, r2), ..., (lq, r ...
- HDU 多校对抗赛第二场 1010 Swaps and Inversions
Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- lwIP RAW_API
lwIP RAW TCP/IP接口 作者: Adam Dunkels, Leon Woestenberg, Christiaan Simons lwIP为使用TCP/IP协议通信的应用程序编程提供了两 ...
- mysql_存储过程和函数
存储过程和函数 1.什么是存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对 ...
- tomcat部署多个项目,通过域名解析访问不同的网站
转摘自:http://qinyinbolan.blog.51cto.com/4359507/1211064 说明: 1.首先需要有多个域名,同时指向一个IP地址. 例如:域名:www.bbb.com, ...
- ActiveMQ(3) ActiveMQ创建(simpleAuthenticationPlugin)安全认证
控制端安全认证: ActiveMQ目录conf下jetty.xml: <bean id="securityLoginService" class="org.ecli ...
- 网络编程:connect函数
TCP客户用connect函数来建立与TCP服务器的连接: cpp #include<sys/socket.h> int connect(int sockfd, const struct ...
- oracle 包和包实现
包: create or replace package sp_pexam_clear as --定义结构体 /*type re_stu is record( rname student.name%t ...
- [POJ1082&POJ2348&POJ1067&POJ2505&POJ1960]简单博弈题总结
鉴于时间紧张...虽然知道博弈是个大课题但是花一个上午时间已经极限了... 希望省选过后再回过头来好好总结一遍吧. 接下来为了看着顺眼一点...还是按照难度顺序吧 POJ1082 一道最简单的博弈 ...
- 【BZOJ】2442: [Usaco2011 Open]修剪草坪
[算法]动态规划 [题解] 万物皆动规,每时每刻都要想着DP!特别是这种明显可以序列递推的题目. 一个简单的思路是f[i]表示前i个选择合法方案(第i个可选可不选)的最大效率 f[i]=max(f[i ...