bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大。
题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积
/**************************************************************Problem: 1069User: walfyLanguage: C++Result: AcceptedTime:892 msMemory:1360 kb ****************************************************************///#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pi acos(-1.0) #define ll long long #define vi vector<int> #define mod 10007 #define C 0.5772156649 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #define pil pair<int,ll> #define pli pair<ll,int> #define pii pair<int,int> #define cd complex<double> #define ull unsigned long long #define base 1000000000000000000 #define fio ios::sync_with_stdio(false);cin.tie(0)using namespace std;const double eps=1e-6; const int N=2000+10,maxn=5000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;struct point{ll x,y; }; point p[N],s[N]; int top,n; ll dir(point p1,point p2,point p3) {return (p3.x-p2.x)*(p2.y-p1.y)-(p3.y-p2.y)*(p2.x-p1.x); } ll dis(point a,point b) {return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } ll area(point p1,point p2,point p3) {return fabs(dir(p1,p2,p3)); } bool cmp(point a,point b) {ll te=dir(p[0],a,b);if(te<0)return 1;if(te==0&&dis(p[0],a)<dis(p[0],b))return 1;return 0; } void graham() {int pos,minx,miny;minx=miny=inf;for(int i=0;i<n;i++){if(p[i].x<minx||(p[i].x==minx&&p[i].y<miny)){minx=p[i].x;miny=p[i].y;pos=i;}}swap(p[0],p[pos]);sort(p+1,p+n,cmp);p[n]=p[0];s[0]=p[0],s[1]=p[1],s[2]=p[2];top=2;for(int i=3;i<=n;i++){while(dir(s[top-1],s[top],p[i])>=0&&top>=2)top--;s[++top]=p[i];}ll ans=0;for(int i=0;i<top;i++){int j,a1=(i+1)%top,a2=(i+3)%top;for(j=(i+2)%top;j!=i;j=(j+1)%top){while(a1!=j&&area(s[(a1+1)%top],s[i],s[j])>=area(s[a1],s[i],s[j]))a1=(a1+1)%top;while(a2!=i&&area(s[(a2+1)%top],s[i],s[j])>=area(s[a2],s[i],s[j]))a2=(a2+1)%top;ans=max(ans,area(s[a1],s[i],s[j])+area(s[a2],s[i],s[j]));}}printf("%.3f\n",1.0*ans/2); } int main() {scanf("%d",&n);for(int i=0;i<n;i++)scanf("%lld%lld",&p[i].x,&p[i].y);graham();return 0; } /****************************************/
View Code
转载于:https://www.cnblogs.com/acjiumeng/p/9073981.html
bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积相关推荐
- bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1373 [Submit][S ...
- Gym - 102460L Largest Quadrilateral(几何-凸包+旋转卡壳求最大的四边形面积)
题目链接:点击查看 题目大意:在笛卡尔坐标系上给出 n 个点,要求选出四个点,使得组成的四边形面积最大,求出这个最大的面积,注意此处组成的四边形不是严格意义上的四边形,只需要选四个点就行 题目分析:首 ...
- bzoj1069 [SCOI2007]最大土地面积 凸包+单调性
先做凸包 枚举对角线,然后两个指针单调的扫.. 枚举的顺序有时候也会创造性质 注意重点不能选! 码: #include<iostream> #include<cstdio> # ...
- POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))
链接:https://vjudge.net/problem/POJ-2187 题意:求求距离最远点对. 思路:肯定为凸包上的点,可枚举,也可根据凸包性质旋转卡壳求对踵点. 参考博客: https:// ...
- POJ 2187 凸包+旋转卡壳
思路: 求个凸包 旋转卡壳一下 就求出来最远点对了 注意共线情况 也就是说 凸包如果有一堆点共线保留端点即可 //By SiriusRen #include <cmath> #incl ...
- hdu2202 凸包+旋转卡壳
点击打开hdu2202 思路:最大三角形面积,那么肯定这三个点在最外围,所以先求凸包,然后用旋转卡壳求出那三个点求出面积最大. #include <iostream> #include & ...
- 凸包旋转卡壳(andrew)
题目链接 如图计算上凸包时判断C1,C2,C3C_1,C_2,C_3C1,C2,C3显然C3C_3C3是经过A,BA,BA,B的上凸包 可以发现只需要通过A,BA,BA,B即可判断,通过观察可 ...
- 任意给4条边求形成四边形面积最大值
题目:任意给4条边,求形成四边形面积最大值. 结论:形成的四边形的四个顶点都在它的外接圆上,面积S满足: 其中 这也即是圆内接四边形的面积公式. 证明过程: 首先我们把四边形的四个顶点和四条边顺次分别 ...
- 【BZOJ1069】【SCOI2007】—最大土地面积(凸包+旋转卡壳)
传送门 考虑枚举任意222个点,那么只需要枚举第二个点的时候旋转卡壳就可以O(n)O(n)O(n)得到最远点对了 #include<bits/stdc++.h> using namespa ...
最新文章
- 可视化-grafana_使用influxDB数据
- javascript事件模型框架
- 学生成绩管理系统python课程设计,简易学生成绩管理系统Python
- Integration testing
- astype函数_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!
- |洛谷|动态规划|P1164 小A点菜
- Web Js 按键事件……Enter提交事件 Enter Js事件
- CentOS7 防火墙关闭
- Android事件分发 笔记
- Nagios(八)—— Nagios Web 端管理工具Nagiosql
- 发现身边90%的朋友都是负债累累,是什么情况?
- 双网卡绑定--实现负载冗余
- 679. 24 点游戏
- vue踩坑以及自己的解决办法总结,
- ios实现读写锁,AFN的实现
- oracle imp仅导入数据
- Android DVM简介
- Android Service之bindService
- 罗克韦尔AB PLC 通过RSLinx Classic与PLC建立通信的具体方法步骤
- 【日语】secret base
热门文章
- 通达OA任意用户登录复现(最新)
- C#,图像二值化(17)——全局阈值的ISODATA算法(亦称作InterMeans法)及其源程序
- 做IT精英还是IT民工?
- 司法制度类毕业论文文献包含哪些?
- 图书馆借阅代码Java_java图书馆管理系统源代码 图书借阅和归还管理
- [含文档+PPT+源码等]基于SSM个人财务记账账单收入支出统计管理系统[包运行成功]
- Fabric实战(四)-多机部署fabric网络-solo
- 《奋斗吧!菜鸟》第三次作业:团队项目的原型设计
- 基于SSM的小区缴费系统
- 《在Win10下使用DOSBox+MASM32工具包搭建汇编环境》