题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MB Description Input   Output 题意: 思路: 求最大的矩形面积,先把这些点转化成线段,记录下线段的长度和中点和两个端点,形成矩形说明对角线长度相等,且共中点,所以把线段按长度和中点排序,如果都相等,然后用三角形的三个顶点坐标计算面积的公式计算最大面积就好了; AC代码: /**********************************…
2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1535  Solved: 693[Submit][Status][Discuss] Description Input   Output   Sample Input   Sample Output   HINT   Source Day2 我开始想着记每条线的斜率,然后排序来找平行线,但却不能保证构成矩形.一种新奇的思路:记录对角线,两条对角线长度相等且中点…
题目大意:给定n个点,求一个最大的矩形,该矩形的四个顶点在给定的点上 找矩形的方法是记录全部线段 若两条线段长度相等且中点重合 这两条线段就能够成为矩形的对角线 于是我们找到全部n*(n-1)/2条线段.按长度排序,长度相等依照中点排序,然后对于每一个点向前找符合要求的,计算面积.更新ans 注意避免一切double! 长度切记不能开根号.直接用long long存储,否则第三个点有两条长度极其接近的线段把double卡掉,计算面积要用叉积,中点不要除以2,连math库都不用开了! #inclu…
题目描述 题解 计算几何 由于对角线平分且相等的四边形是矩形,因此我们可以把每条对角线存起来,按照对角线长度和中点位置为关键字排序,这样对于每个相同长度和中点的对角线就排到了一起. 于是对于每段可能形成矩形的区间暴力即可. 时间复杂度$O(cnt)$,$cnt$为矩形个数.根据大爷讲的某定理,$cnt<O(n^2\sqrt n)$,可以A掉本题. 注意本题任何时候都不能使用double,否则炸精度无限WA. #include <cstdio> #include <cstring&g…
原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 枚举任意两个点,计算距离和连成线段的中点,这些线段作为矩形的对角线 矩形对角线长度相等,互相平分 所以--给线段排序 cmp先按线段长度排序,再按中点坐标排序 最后暴力统计 end 上代码 记得要用long long #pragma GCC optimize("O3") #include…
[BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两两枚举对角线即可. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long ll;…
数矩形 Time Limit: 20 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 最近某歌手在研究自己的全国巡回演出,他将所有心仪的城市都用平面上一个点来表示,并打算从中挑选出4个城市作为这次巡回演出的地点. 为了显示自己与众不同,他要求存在一个矩形使得挑选出的4个点恰好是这个矩形的4个顶点,并且希望这个矩形的面积最大. 这可急坏了经纪人,于是他向全球歌迷征集方案,当然你这位歌迷一定不会错过这个机会. Input…
LINK:数矩形 题意:给出n个点 求出一个最大的矩形. 矩形可以使斜着的.(不会告诉你样例我算了几年 这道题的一个潜规则 矩形面积都是整数 我也不知道为啥一定是整数 姑且是题目输出的要求吧. 所以用double什么的精度会挂的很惨. 考虑暴力 n^3枚举点 剩下一个点利用一些奇奇怪怪的向量什么的可以计算出来.(难写+TLE 考虑矩形的性质 对边平行且相等还得有一个角是直角 这个性质过于没用. 考虑另一个性质 对角线相等.这个性质就算是一个强性质. 我们n^2枚举点对 可以把对角线拿出来 然后围…
因为已经看了一眼题解,知道是算中点和长度,相同时构成一个矩形,所以就把所有的线段算出来,然后排序,相同的就更新答案 为了避免误差,我们都用整数存,中点直接相加就行了,没必要除2,长度也只要平方就行了,不用开根,算面积就用叉积算,这样做就完全没有误差了 虽然复杂度本来是不行的但是出题人没想卡咱,就过了 const maxn=; type point=record x,y:longint; end; segment=record aa,bb:point; x,y:longint; l:int64;…
对于两条线段,若其中点重合,且长度相等,那么它们一定是某个矩形的对角线. N*N地处理出所有线段,排序,对每一部分中点重合.长度相等的线段进行暴力枚举,更新答案. 用 long double 注意EPS的设置,卡精度. 注意数组大小的设置,容易MLE. #include<cstdio> #include<algorithm> #include<cmath> #include<iostream> using namespace std; #define EPS…