bzoj2338数矩形(rectangle)
数矩形(rectangle)
计算几何
把所有点两两连线,把这些线按长度排序,再按中点排序
能组成矩形的线一定是连续的
最坏就是所有点围成一个圆,交于圆心
复杂度O(可以过)
要用叉积,不然会被卡精
我居然认为极角序就是逆时针,错了好久
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 1505
#define eps 1e-11
using namespace std;
int n,tot;
struct po{
long long x,y,len,mx,my;
}s[maxn],a[maxn*maxn],t1,t2;
long long ans;
long long getl(int i,int j){
return (s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y);
}
bool cmp(po a,po b){
if(a.len==b.len)return a.mx<b.mx||a.mx==b.mx&&a.my<b.my;
return a.len<b.len;
}
long long cj(po a,po b){
return a.x*b.y-a.y*b.x;
}
bool pd(int i,int j)
{
if(getl(a[i].x,a[j].x)!=getl(a[i].y,a[j].y))return 0;
if(getl(a[i].x,a[j].y)!=getl(a[i].y,a[j].x))return 0;
return 1;
}
long long size(int i,int j){
po h[4];
h[0]=s[a[i].x],h[1]=s[a[j].y];
h[2]=s[a[i].y],h[3]=s[a[j].x];
long long sum=0;
for(int i=0;i<4;i++){
sum+=cj(h[i],h[(i+1)%4]);
}
return abs(sum);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%lld%lld",&s[i].x,&s[i].y);
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
a[++tot].x=i,a[tot].y=j;
a[tot].mx=s[i].x+s[j].x,a[tot].my=s[i].y+s[j].y;
a[tot].len=getl(i,j);
}
}
sort(a+1,a+tot+1,cmp);
int l=1,now=1;
while(l<=tot){
while(a[l].len==a[now].len&&a[now].mx==a[l].mx&&a[now].my==a[l].my&&now<=tot)now++;
now--;
for(int i=l;i<=now;i++){
for(int j=i+1;j<=now;j++){
if(pd(i,j)){
ans=max(ans,size(i,j));
}
}
}
now++;l=now;
}
cout<<(long long)ans/2<<endl;
return 0;
}
bzoj2338数矩形(rectangle)的更多相关文章
- bzoj2338 数矩形
给出N(N≤1500)个点,求选四个点作为顶点组成矩形的最大面积,保证有解. 对每两个点连边,按边长排序,枚举等长且中点相同的边作为对角线组成矩形,计算面积取最大值. 时间复杂度O(n2logn) # ...
- 【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 中学数学老师告诉我们,一个矩形的两条对角线相等,所以只要把所有的边拿出来,记录下中点坐标 ...
随机推荐
- 漫谈 Clustering (3): Gaussian Mixture Model
上一次我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 GMM ...
- Vue源码学习二 ———— Vue原型对象包装
Vue原型对象的包装 在Vue官网直接通过 script 标签导入的 Vue包是 umd模块的形式.在使用前都通过 new Vue({}).记录一下 Vue构造函数的包装. 在 src/core/in ...
- Ubuntu16.04 hadoop 伪分布式 的文件配置
首先需要完成java环境的配置,这里就省略了. 完成 hadoop 伪分布(pesudo distribution),只需配置下面 五 个文件即可: hadoop-env.sh core-site.x ...
- windows 时间同步至最新时间方法 | windows 时间同步服务器
国内 windows 系统的电脑有时候不能自动同步互联网当前时间,这就需要改一下 windows 的时间同步服务器 版权声明:本文为博主原创文章,未经博主允许不得转载. 原文地址:https://ww ...
- 卸载Redhat 7自带的yum,安装并使用网易163源
由于redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,安装CentOS yum工具,再配置其他源,以下为详细过程:删除redhat原有的yum ...
- 【JS】JS实现时间戳转换成普通时间
var time = 1514457627; alert(getDate(time)); function getDate(tm){ var tt=new Date(parseInt(tm) * 10 ...
- JZOJ 1267. 路障
1267. 路障(block.pas/c/cpp) (File IO): input:block.in output:block.out Time Limits: 1000 ms Memory Li ...
- python爬虫入门八:多进程/多线程
什么是多线程/多进程 引用虫师的解释: 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期. 进程(有时被称为重量级进程)是 ...
- .NET 与MVC的区别
.NET MVC与三层架构 二者都是架构模式,并且也有一定的共存度,在实际开发中,严格区分意义不大. 基于最近涉及到这部分知识就在复习下,编程过程中,基础概念更重要,而不是技术. 1.三层架构:即UI ...
- 为什么要用枚举实现Singleton--Java
原文地址:http://www.cnblogs.com/AprilCal/p/5426007.html 理由一:无需再考虑可序列化的情况 <effective java>第77条:对于 ...