对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线。

N*N地处理出所有线段,排序,对每一部分中点重合、长度相等的线段进行暴力枚举,更新答案。

用 long double 注意EPS的设置,卡精度。

注意数组大小的设置,容易MLE。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<iostream>
 5 using namespace std;
 6 #define EPS 0.000000000000001
 7 #define N 1501
 8 typedef long long ll;
 9 typedef long double llf;
10 llf sqr(const llf &x){return x*x;}
11 struct Point
12 {
13     llf x,y;
14     Point(const llf &a,const llf &b){x=a;y=b;}
15     Point(){}
16     void Read(){cin>>x>>y;}
17 };
18 typedef Point Vector;
19 struct Line
20 {
21     Point l,r,m; llf len;
22     Line(const Point &a,const Point &b){l=a;r=b;}
23     Line(){}
24     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));}
25 };
26 bool Equal(const llf &a,const llf &b){return fabs(a-b)<EPS ? 1 : 0;}
27 bool Less(const llf &a,const llf &b){return a-b<(-EPS) ? 1 : 0;}
28 bool LeEqu(const llf &a,const llf &b){return a-b<EPS ? 1 : 0;}
29 bool operator < (const Point &a,const Point &b)
30 {return (!Equal(a.x,b.x))?Less(a.x,b.x):Less(a.y,b.y);}
31 bool operator == (const Point &a,const Point &b)
32 {return (Equal(a.x,b.x)&&Equal(a.y,b.y)) ? 1 : 0;}
33 bool operator != (const Point &a,const Point &b){return a==b ? 0 : 1;}
34 bool operator < (const Line &a,const Line &b)
35 {return a.m!=b.m ? a.m<b.m : Less(a.len,b.len);}
36 bool operator == (const Line &a,const Line &b)
37 {return (Equal(a.len,b.len)&&a.m==b.m) ? 1 : 0;}
38 bool operator != (const Line &a,const Line &b){return a==b ? 0 : 1;}
39 Vector operator - (const Point &a,const Point &b){return Vector(a.x-b.x,a.y-b.y);}
40 llf Cross(const Vector &a,const Vector &b){return a.x*b.y-a.y*b.x;}
41 int n,m,head;
42 Point p[N];
43 llf ans;
44 Line lines[N*N>>1];
45 int main()
46 {
47     scanf("%d",&n);
48     for(int i=1;i<=n;i++) p[i].Read();
49     for(int i=1;i<=n;i++)
50       for(int j=i+1;j<=n;j++)
51         if(p[i]!=p[j])
52           {
53             lines[++m]=Line(p[i],p[j]);
54             lines[m].Init();
55           }
56     sort(lines+1,lines+m+1);
57     for(int i=1;i<=m;i++)
58       {
59         if(lines[i]!=lines[i-1]) head=i;
60         if(lines[i]!=lines[i+1])
61           if(i-head)
62             {
63               for(int j=head;j<=i;j++)
64                 for(int k=j+1;k<=i;k++)
65                   ans=max(ans,fabs(Cross(lines[j].l-lines[j].m,lines[k].l-lines[k].m))
66                   +fabs(Cross(lines[j].l-lines[j].m,lines[k].r-lines[k].m)));
67             }
68       }
69     printf("%lld\n",(ll)ans);
70     return 0;
71 }

转载于:https://www.cnblogs.com/autsky-jadek/p/4072014.html

【计算几何】bzoj2338 [HNOI2011]数矩形相关推荐

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

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

  2. [HNOI 2011]数矩形

    Description 题库链接 给出平面上 \(n\) 个点,选出四个点作为矩形顶点.求出矩形最大面积. \(1\leq n\leq 1500\) Solution 转载自 Z-Y-Y-S dark ...

  3. 2019.5.summary

    2019.5.1 CF C. Prefix Sum Primes 感觉CF就是训练妳如何养成对题目强大的YY能力的QAQ 我们构造 如果只有一种,没辙,只能这样放 否则先放一个2,再放一个1 接下来把 ...

  4. GDI+入门——带你走进Windows图形的世界

    一.GDI+基础 1.GDI+简单介绍 GDI+是微软的新一代二维图形系统,它全然面向对象,要在Windows窗口中显示字体或绘制图形必需要使用GDI+.GDI+提供了多种画笔.画刷.图像等图形对象, ...

  5. JAVA基础篇(1)

    目录 一.Java数据的8大基本类型 二.运算符 1.普通的四则运算符+ - * / 2.取余%(求模) 3.自增自减 4.比较运算符 5.逻辑运算符 6.三目运算符 7.赋值运算 8.复合赋值运算符 ...

  6. 前端:给中国奥运金牌数做可视化

    关注并将「趣谈前端」设为星标 每早08:30按时推送技术干货/优秀开源/技术思维 前言 2020东京奥运会已经开幕很多天了,还记得小时候看奥运会的是在2008年的北京奥运会,主题曲是「北京欢迎你」, ...

  7. 形状文法--建筑风格分类总结

    1.Shape –Talking about seeing and doing(田小娣) 在Stiny George的Shape-Talking about seeing and doing文章中,S ...

  8. cad页面布局快捷键_CAD绘图中的常用按键以及功效

    CAD软件中的常用快捷键有很多,下面就来介绍一些比较常见的功能的快捷键吧! 复制对象CO或CP 创建属性定义AT 编辑单个块的可变属性ATE 修改对象的颜色.图层.线型和厚度CH 设置新对象的颜色CO ...

  9. Java初级知识汇总

    环境的准备: 第一步:下载并安装JDK8 第二步:配置环境变量:配置哪个JDK,哪个就生效 1)JAVA_HOME 配置的是JDK的根目录C:\Program Files\Java\jdk1.8.0_ ...

最新文章

  1. 多媒体容器格式概述①
  2. C++原子操作 atomic的使用及效率
  3. java实现人脸识别源码【含测试效果图】——ServiceImpl层(UserServiceImpl)
  4. 服务器io修改,更改 Linux I/O 调度器来改善服务器性能
  5. MySQL元数据库——information_schema
  6. PBRT中的误差舍入管理(浮点运算)
  7. gitee怎么仓库间传文件_薄书的Gitee 码云使用教程学习纪录 - 薄书
  8. 计算机组成原理秦磊华 pdf,_计算机组成原理_设计性实践教学模式研究_秦磊华.pdf...
  9. 23_多易教育之《yiee数据运营系统》OLAP平台-整体概述篇
  10. c++实现 离散数学 “自反 对称 ” 详解
  11. ios android 系统占用空间,iOS 系统占用了 20G 储存空间?别担心,教你快速解决!...
  12. java 单元测试 私有成员变量,单元测试时测试一个private私有方法 - - ITeye博客
  13. esxi云虚拟服务器如何搭建,如何搭建esxi环境?
  14. mysql 超卖_mysql 解决超卖问题的锁分析
  15. pad平板性能测试软件,安兔兔评测iPad版
  16. ceph bluestore 磁盘空间管理源码解析
  17. [CSP-S模拟测试41]题解
  18. js siblings()处理选中高亮问题
  19. x264中码率控制(一)
  20. 发票识别+真伪查验,解决保险理赔的票据欺诈难题

热门文章

  1. Go WebSocket开发与测试实践【gorilla/websocket】
  2. 软件测试启航篇:测试的分类
  3. jdom编写xml自动缩进_Spring Beans 自动装配
  4. 2019/3/27写给自己
  5. a5 1c语言实现,初识C语言1_qq5fb3b05a5f322的技术博客_51CTO博客
  6. 克隆网站工具_4 种开源云安全工具
  7. DE19 Introduction to the Laplace Transform
  8. 4.2.2 - Logical and/or Operators
  9. cognos的HTMl显示,cognos利用html项目和提示元素结合
  10. 文本分类实战--从TFIDF到深度学习CNN系列效果对比(附代码)