[HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 2081  Solved: 920[Submit][Status][Discuss] Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, 输出所求矩形的面积和四个顶点坐标   Input 第一行为一个整数n(3<=n<=50000) 从第2至第n+1行每行有两个浮点数,表示一个顶点的x和y坐标,不用科…
题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, 输出所求矩形的面积和四个顶点坐标 Input 第一行为一个整数n(3<=n<=50000) 从第2至第n+1行每行有两个浮点数,表示一个顶点的x和y坐标,不用科学计数法 Output 第一行为一个浮点数,表示所求矩形的面积(精确到小数点后5位), 接下来4行每行表示一个顶点坐标,要求第一行为y坐…
1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1435  Solved: 653[Submit][Status][Discuss] Description Source 计算几何 vfleaking提供Spj 竟然1A了........哈哈哈哈哈哈哈哈哈哈 首先猜有一条边是凸边上的边(理由:不是的话我不会做) 然后旋转卡壳,最上面就是距离最远的点,最右面是点积最大,…
给你一些点,让你用最小的矩形覆盖这些点 首先有一个结论,矩形的一条边一定在凸包上!!! 枚举凸包上的边 用旋转卡壳在凸包上找矩形另外三点... 注意精度问题 #include<cstdio> #include<cmath> #include<ctime> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<…
来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"string.h" #include"math.h" #define M 50006 #define eps 1e-10 #include"stdlib.h" #define inf 999999999 typedef struct node { double x,…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 矩形一定贴着凸包的一条边.不过只是感觉这样. 枚举一条边,对面的点就是正常的旋转卡壳.两边的那个点可以用点积的最小/大来判断,因为是投影. 然后调了一万年.不过好像把精度设成 1e-13 而不是 1e-8 就能过了. 和许多代码对拍,有各种各样的不同.也不知道自己是不是真的对了. #include<cstdio> #include<cstring> #include&l…
BZOJ1185[HNOI2007] 最小矩形覆盖 题面 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形,输出所求矩形的面积和四个顶点的坐标 分析 首先可以先求凸包,因为覆盖了凸包上的顶点,凸包内的顶点也一定能被覆盖 结论:这个矩形的一条边一定与凸包的一条边重合. 然后对于凸包的每一条边\(\vec{s_is_{i+1}}\),我们通过旋转卡壳找到最左侧的点l,最右侧的点r,最高点p,过p做\(\vec{s_is_{i+1}}\)的平行线,过l,r做\(\vec{s_is_{i+1}}\…
题目链接 BZOJ1185 题解 最小矩形一定有一条边在凸包上,枚举这条边,然后旋转卡壳维护另外三个端点即可 计算几何细节极多 维护另外三个端点尽量不在这条边上,意味着左端点尽量靠后,右端点尽量靠前,加上或减去一个\(eps\)来处理 \(C++\)中\(printf\)输出\(0.00000\)会变成\(-0.00000\),需要特判 用叉积点乘判距离大小,正负方向不要搞错 求凸包记得排序 #include<algorithm> #include<iostream> #inclu…
传送门 不难看出最后的矩形一定有一条边与凸包某条边重合. 因此先求出凸包,然后旋转卡壳求出当前最小矩形面积更新答案. 代码: #include<bits/stdc++.h> #define N 50005 #define eps 1e-9 using namespace std; struct pot{ long double x,y; inline pot operator+(const pot&a){return (pot){x+a.x,y+a.y};} inline pot op…
题目链接 嗯,毒瘤题. 首先有一个结论,就是最小矩形一定有条边和凸包重合.脑补一下就好了. 然后枚举凸包的边,用旋转卡壳维护上顶点.左端点.右端点就好了. 上顶点用叉积,叉积越大三角形面积越大,对应的高也就越大.两边的点用点积,点积越大投影越大. 然后就是精度问题.这种实数计算最好不要直接用比较运算符,要用差和\(eps\)的关系来比较,我就是一直卡在这里.还好有爆炸\(OJ\)离线题库提供的数据... #include <cstdio> #include <cmath> #inc…