【计算几何】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条线 ...
随机推荐
- codevs 1191 线段树 区间更新(水)
题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. ...
- Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings
E. The Fair Nut and Strings 题目链接:https://codeforces.com/contest/1084/problem/E 题意: 输入n,k,k代表一共有长度为n的 ...
- sencha touch 模仿tabpanel导航栏TabBar的实现代码
这篇文章介绍了sencha touch 模仿tabpanel导航栏TabBar的实例代码,有需要的朋友可以参考一下 基于sencha touch 2.2所写 效果图: 代码: /* *模仿tabpan ...
- 转:深入理解javascript原型和闭包系列
转自:深入理解javascript原型和闭包系列 从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然 ...
- LOJ tangjz的背包
题目大意 有 \(n\) 个物品, 第 \(i\) 个物品的体积为 \(i\) 令 \(f(x)\) 为 选择 \(m\) 个物品, 体积和为 \(x\) 的方案数 令 \(V = \sum_{i=1 ...
- 使用state模块部署lamp架构
install_httpd: pkg.installed: - name: httpd httpd_running: service.running: - name: httpd - enable: ...
- html初探
HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...
- vivo面试经验4(linux基本操作,最基本,必须得会!!)
操作linux通过xshell进行连接: 基本操作介绍 1.shutdown -h 关机 shutdown -r 重启 2.mkdir aaa 新建目录aaa rmdir aaa 删除目录aaa 3. ...
- 【BZOJ2818】Gcd [莫比乌斯反演]
Gcd Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y&l ...
- 【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]
看电影 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看 ...