【计算几何】bzoj2338 [HNOI2011]数矩形
对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线。
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]数矩形相关推荐
- 【bzoj2338】[HNOI2011]数矩形 计算几何
题目描述 题解 计算几何 由于对角线平分且相等的四边形是矩形,因此我们可以把每条对角线存起来,按照对角线长度和中点位置为关键字排序,这样对于每个相同长度和中点的对角线就排到了一起. 于是对于每段可能形 ...
- [HNOI 2011]数矩形
Description 题库链接 给出平面上 \(n\) 个点,选出四个点作为矩形顶点.求出矩形最大面积. \(1\leq n\leq 1500\) Solution 转载自 Z-Y-Y-S dark ...
- 2019.5.summary
2019.5.1 CF C. Prefix Sum Primes 感觉CF就是训练妳如何养成对题目强大的YY能力的QAQ 我们构造 如果只有一种,没辙,只能这样放 否则先放一个2,再放一个1 接下来把 ...
- GDI+入门——带你走进Windows图形的世界
一.GDI+基础 1.GDI+简单介绍 GDI+是微软的新一代二维图形系统,它全然面向对象,要在Windows窗口中显示字体或绘制图形必需要使用GDI+.GDI+提供了多种画笔.画刷.图像等图形对象, ...
- JAVA基础篇(1)
目录 一.Java数据的8大基本类型 二.运算符 1.普通的四则运算符+ - * / 2.取余%(求模) 3.自增自减 4.比较运算符 5.逻辑运算符 6.三目运算符 7.赋值运算 8.复合赋值运算符 ...
- 前端:给中国奥运金牌数做可视化
关注并将「趣谈前端」设为星标 每早08:30按时推送技术干货/优秀开源/技术思维 前言 2020东京奥运会已经开幕很多天了,还记得小时候看奥运会的是在2008年的北京奥运会,主题曲是「北京欢迎你」, ...
- 形状文法--建筑风格分类总结
1.Shape –Talking about seeing and doing(田小娣) 在Stiny George的Shape-Talking about seeing and doing文章中,S ...
- cad页面布局快捷键_CAD绘图中的常用按键以及功效
CAD软件中的常用快捷键有很多,下面就来介绍一些比较常见的功能的快捷键吧! 复制对象CO或CP 创建属性定义AT 编辑单个块的可变属性ATE 修改对象的颜色.图层.线型和厚度CH 设置新对象的颜色CO ...
- Java初级知识汇总
环境的准备: 第一步:下载并安装JDK8 第二步:配置环境变量:配置哪个JDK,哪个就生效 1)JAVA_HOME 配置的是JDK的根目录C:\Program Files\Java\jdk1.8.0_ ...
最新文章
- 多媒体容器格式概述①
- C++原子操作 atomic的使用及效率
- java实现人脸识别源码【含测试效果图】——ServiceImpl层(UserServiceImpl)
- 服务器io修改,更改 Linux I/O 调度器来改善服务器性能
- MySQL元数据库——information_schema
- PBRT中的误差舍入管理(浮点运算)
- gitee怎么仓库间传文件_薄书的Gitee 码云使用教程学习纪录 - 薄书
- 计算机组成原理秦磊华 pdf,_计算机组成原理_设计性实践教学模式研究_秦磊华.pdf...
- 23_多易教育之《yiee数据运营系统》OLAP平台-整体概述篇
- c++实现 离散数学 “自反 对称 ” 详解
- ios android 系统占用空间,iOS 系统占用了 20G 储存空间?别担心,教你快速解决!...
- java 单元测试 私有成员变量,单元测试时测试一个private私有方法 - - ITeye博客
- esxi云虚拟服务器如何搭建,如何搭建esxi环境?
- mysql 超卖_mysql 解决超卖问题的锁分析
- pad平板性能测试软件,安兔兔评测iPad版
- ceph bluestore 磁盘空间管理源码解析
- [CSP-S模拟测试41]题解
- js siblings()处理选中高亮问题
- x264中码率控制(一)
- 发票识别+真伪查验,解决保险理赔的票据欺诈难题
热门文章
- Go WebSocket开发与测试实践【gorilla/websocket】
- 软件测试启航篇:测试的分类
- jdom编写xml自动缩进_Spring Beans 自动装配
- 2019/3/27写给自己
- a5 1c语言实现,初识C语言1_qq5fb3b05a5f322的技术博客_51CTO博客
- 克隆网站工具_4 种开源云安全工具
- DE19 Introduction to the Laplace Transform
- 4.2.2 - Logical and/or Operators
- cognos的HTMl显示,cognos利用html项目和提示元素结合
- 文本分类实战--从TFIDF到深度学习CNN系列效果对比(附代码)