题目描述

最近某歌手在研究自己的全球巡回演出计划,他将所有心仪的城市都用平面上的一个点来表示,并打算从中挑选出 4 个城市作为这次巡回演出的地点。

为了显示自己与众不同,他要求存在一个矩形使得挑选出的 4 个点恰好是这个矩形的 4 个顶点,并且希望这个矩形的面积最大。

这可急坏了其经纪人,于是他向全球歌迷征集方案,当然你这位歌迷一定不会错过这个机会。

输入输出格式

输入格式:

从文件input.txt中读入数据,输入文件的第一行是一个正整数NN ,表示平面上点的个数(即某歌手心仪的城市数)。接下来的NN 行,每行是由空格隔开的两个整数X_iXi​ 和Y_iYi​ ,表示其对应点的坐标。20%的数据满足N\leq 500N≤500 ,100%的数据满足N\leq 1500N≤1500 ,-10^8\leq X_i,Y_i\leq 10^8−108≤Xi​,Yi​≤108 ,且输入数据保证答案存在。

输出格式:

输出文件 output.txt 仅包含一个非负整数,表示最大的矩形面积。

输入输出样例

输入样例#1: 复制

8
-2 3
-2 -1
0 3
0 -1
1 -1
2 1
-3 1
-2 1
输出样例#1: 复制
10
两条线段能作于矩形的对角线有2个条件
1.中点相同
2.长度相同
于是$O(n^{2})$处理出所有直线,排序
找到满足条件的区间,枚举得出答案
复杂度有点玄学
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
struct point
{
lol x,y;
lol operator *(const point &b) const
{
return x*b.y-y*b.x;
}
point operator -(const point &b) const
{
return (point){x-b.x,y-b.y};
}
point operator +(const point &b) const
{
return (point){x+b.x,y+b.y};
}
}a[];
struct Node
{
lol l;
point v,mid;
}e[];
int n,cnt;
lol ans;
bool cmp(Node a,Node b)
{
if (a.l==b.l)
{
if (a.mid.x==b.mid.x) return a.mid.y<b.mid.y;
return a.mid.x<b.mid.x;
}
return a.l<b.l;
}
int main()
{int i,j,k,l;
cin>>n;
for (i=;i<=n;i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
}
for (i=;i<=n;i++)
{
for (j=;j<=i-;j++)
{
e[++cnt].mid=a[i]+a[j];
e[cnt].v=a[i]-a[j];
e[cnt].l=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
}
}
sort(e+,e+cnt+,cmp);
for (i=;i<=cnt;i=j+)
{
j=i;
while (j+<=cnt&&e[j+].l==e[i].l&&e[j+].mid.x==e[i].mid.x&&e[j+].mid.y==e[i].mid.y) j++;
for (k=i;k<=j;k++)
{
for (l=i;l<=k-;l++)
{
ans=max(ans,abs(e[k].v*e[l].v)>>);
}
}
}
printf("%lld",ans);
}

[HNOI2011]数矩形的更多相关文章

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

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

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

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

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

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

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

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

  5. luogu P3217 [HNOI2011]数矩形

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

  6. 2338: [HNOI2011]数矩形 - BZOJ

    因为已经看了一眼题解,知道是算中点和长度,相同时构成一个矩形,所以就把所有的线段算出来,然后排序,相同的就更新答案 为了避免误差,我们都用整数存,中点直接相加就行了,没必要除2,长度也只要平方就行了, ...

  7. BZOJ2338: [HNOI2011]数矩形

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

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

    对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线. N*N地处理出所有线段,排序,对每一部分中点重合.长度相等的线段进行暴力枚举,更新答案. 用 long double 注意EP ...

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

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

随机推荐

  1. 201621123062《java程序设计》第13周作业总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 思维导图: 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多 ...

  2. cpp常用函数总结

    //sprintf sprintf(temp_str_result, "%lf", temp_double); result = temp_str_result; (*begin) ...

  3. 关于mule中Spring使用中的一个问题

    在mule中连接数据库时,大家通常喜欢使用spring的数据库连接以及bean的配置,但是在使用时会出现一些问题,即bean无法找到,这些,就是需要把bean的id属性改成name属性:可能是因为mu ...

  4. PM2使用心得

    PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 npm install -g pm2 常用命令 $ npm i ...

  5. 06-移动端开发教程-fullpage框架

    CSS3的新特性已经讲完了,接下来我们看一下jQuery的一个全屏jQuery全屏滚动插件fullPage.js.我们经常见到一些全屏的特绚丽页面,手指或者鼠标滑动一下就是一整屏切换,而且还有各种效果 ...

  6. 12-TypeScript总结

    从前面的文章大家可以看出,TypeScript具有先天的优势,建议前端开发人员使用TypeScript进行开发,提升自己的面向对象开发思想与能力.: 1.微软开源的客户端脚本语言,是JavaScrip ...

  7. markdown最基本的几种语法

    1.标题 # 相当于<h1></h1> ## 相当于<h2></h2> ### 相当于<h3></h3> #### 相当于< ...

  8. vue-入门

    数据绑定   <!--步骤1:创建html文件--> <!DOCTYPE html> <html lang="en"> <head> ...

  9. SSH 配置

    ssh免密通用配置 Host * Port 1234 User root #ProxyCommand nc -X 5 -x 127.0.0.1:1081 %h %p #5 socks5, 4 sock ...

  10. SpringBoot应用的启动方式

    一:IDE 运行Application这个类的main方法 二:在SpringBoot的应用的根目录下运行mvn spring-boot:run 三:使用mvn install 生成jar后运行 先到 ...