bzoj2338 数矩形
给出N(N≤1500)个点,求选四个点作为顶点组成矩形的最大面积,保证有解。
对每两个点连边,按边长排序,枚举等长且中点相同的边作为对角线组成矩形,计算面积取最大值。
时间复杂度O(n2logn)
#include<cstdio>
#include<algorithm>
int xs[],ys[];
long long ans=;
struct edge{
int x1,y1,x2,y2;
long long len;
int xm,ym;
void cal(){
xm=x1+x2,ym=y1+y2;
int x=x1-x2,y=y1-y2;
len=x*1ll*x+y*1ll*y;
}
}es[];
inline bool operator<(edge a,edge b){
if(a.len<b.len)return ;
else if(a.len==b.len){
if(a.xm<b.xm)return ;
else if(a.xm==b.xm)return a.ym<b.ym;
else return ;
}
else return ;
}
inline long long cal(edge&a,edge&b){
long long x=(a.x1-b.x1)*1ll*(a.y1-b.y2)-(a.x1-b.x2)*1ll*(a.y1-b.y1);
return x<?-x:x;
}
int p=,n;
int main(){
scanf("%d",&n);
for(int i=;i<n;i++)scanf("%d%d",xs+i,ys+i);
for(int i=;i<n;i++)for(int j=i+;j<n;j++){
edge&e=es[p++];
e.x1=xs[i],e.y1=ys[i];
e.x2=xs[j],e.y2=ys[j];
e.cal();
}
std::sort(es,es+p);
for(int i=;i<p;i++){
for(int j=i+;j<p&&es[i].len==es[j].len&&es[i].xm==es[j].xm&&es[i].ym==es[j].ym;j++){
long long s=cal(es[i],es[j]);
if(s>ans)ans=s;
}
}
printf("%lld",ans);
return ;
}
bzoj2338 数矩形的更多相关文章
- bzoj2338数矩形(rectangle)
数矩形(rectangle) 计算几何 把所有点两两连线,把这些线按长度排序,再按中点排序 能组成矩形的线一定是连续的 最坏就是所有点围成一个圆,交于圆心 复杂度O(可以过) 要用叉积,不然会被卡精 ...
- 【BZOJ2338】[HNOI2011]数矩形 几何
[BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两 ...
- bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec Memory Limit: 128 MB Description Input Output 题意: 思路 ...
- bzoj2338[HNOI2011]数矩形 计算几何
2338: [HNOI2011]数矩形 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1535 Solved: 693[Submit][Status ...
- 【BZOJ2338】【HNOI2011】数矩形 [计算几何]
数矩形 Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 最近某歌手在研究自己的全国巡回演出, ...
- 数矩形(N - 暴力求解、打表)
数矩形 Description 给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格. Input 第一行输入一个t, 表示有t组数据,然后 ...
- 【题解】Luogu P3217 [HNOI2011]数矩形
原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...
- luogu P3217 [HNOI2011]数矩形
LINK:数矩形 题意:给出n个点 求出一个最大的矩形. 矩形可以使斜着的.(不会告诉你样例我算了几年 这道题的一个潜规则 矩形面积都是整数 我也不知道为啥一定是整数 姑且是题目输出的要求吧. 所以用 ...
- BZOJ2338: [HNOI2011]数矩形
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2338 中学数学老师告诉我们,一个矩形的两条对角线相等,所以只要把所有的边拿出来,记录下中点坐标 ...
随机推荐
- 了解 C++ 默默编写并调用的函数
前言 对于一个类来说,最最基础的三类成员函数莫过于:构造函数,析构函数以及拷贝函数 (copy构造函数和=重载函数).即使你的类没有为这些函数做出定义,C++ 也会自动为你创建.本文将讲述的是 C++ ...
- 如何使用SnpEff 对SNP结果进行分析
SnpEff is a variant annotation and effect prediction tool. It annotates and predicts the effects of ...
- 给linux添加一个回收站
http://blog.chinaunix.net/uid-26805356-id-3492419.html 都知道linux没有回收站,如果一不小心 rm -rf之后,很难恢复,所以就编写了一个回收 ...
- strong和b
strong和b标签都是很久以前遗留下来的标签,b标签用来加粗字体,strong用来强调,通常浏览器会把强调的语句加粗,所以二者效果比较近似.语义化愈发受重视以后,b标签退出大众视野,strong依然 ...
- 装载:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- ZOJ 1099 HTML
原题链接 题目大意:按照HTML的语法处理一段字符.这道题算是字符串类型的经典,熟练之后可以做一个简单的html解析器了. 解法:没什么好说的,直接代码. 参考代码: #include<iost ...
- POJ-2991 Crane(区间更新+向量旋转)
题目大意:n个向量首尾相连,每次操作使某个区间中的所有向量都旋转同样的角度.每次操作后都回答最后一个向量的坐标. 题目分析:区间维护向量信息.向量旋转:x1=x0*cos(t)-y0*sin(t),y ...
- MySQL中日期与字符串相互转换,并进行日期比较查询
技术交流群:233513714 1.日期无需转换查询(日期在数据库中的类型为字符串) select * from day where dateTime > '2016-03-15' 2.使用da ...
- 【NOIP2010】关押罪犯
一开始看错题了,然后怎么想都想不明白--原题: S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲 ...
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
注:本文转载于:http://blog.csdn.net/minimicall/article/details/39484493 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到 ...