博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1069[SCOI2007]最大土地面积
阅读量:4978 次
发布时间:2019-06-12

本文共 1241 字,大约阅读时间需要 4 分钟。

这个题我改了好久呢。(最终居然是挂在常识上,我的算法完全没写错)

算是计算几何的第一步啦
这个题很容易想到四边形的四个点在凸包上,但是暴力枚举复杂度依然感人
可以考虑先枚举对角线,那么另外两个点就满足单峰,可以用三分优化,据说这样写卡卡常能过
然后发现枚举对角线的过程中,另外两个点也是跟着在动的,维护一下就好了
时间复杂度\(O(n^2)\)
代码:(懒得判叉积方向了,直接用fabs,反正是面积,符号不影响)

#include
#include
#include
#include
using namespace std;#define rg registerconst int maxn=2010;int n,top,top1;double ans;struct oo{double x,y;}a[maxn],st[maxn],stt[maxn];double operator*(oo a,oo b){return a.x*b.y-a.y*b.x;}oo operator-(oo a,oo b){return (oo){b.x-a.x,b.y-a.y};}bool cmp(oo a,oo b){return a.x
=0)top1--; stt[++top1]=a[i]; } for(rg int i=top1-1;i>=2;i--)st[++top]=stt[i];st[top+1]=st[1]; for(rg int i=1;i<=top;i++) { int a=i%top+1,b=(i+2)%top+1; for(rg int j=i+2;j<=top;j++) { while(a%top+1!=j&&fabs((st[a+1]-st[i])*(st[a+1]-st[j]))>fabs((st[a]-st[i])*(st[a]-st[j])))a=a%top+1; while(b%top+1!=i&&fabs((st[b+1]-st[i])*(st[b+1]-st[j]))>fabs((st[b]-st[i])*(st[b]-st[j])))b=b%top+1; ans=max(ans,fabs((st[a]-st[j])*(st[a]-st[i]))+fabs((st[b]-st[i])*(st[b]-st[j]))); } } printf("%.3lf",ans/2.0);}

转载于:https://www.cnblogs.com/lcxer/p/10324343.html

你可能感兴趣的文章
.net垃圾回收学习【C#中的Stack和heap]【续1】
查看>>
深度学习项目
查看>>
软件需求三层次
查看>>
bzoj4520【cqoi2016】K远点对
查看>>
springboot整合redis进行数据缓存
查看>>
node+multiparty+ajax 上传图片并保存到数据库
查看>>
python flask 解决中文乱码
查看>>
ArcSDE 管理工具[原创]
查看>>
EF5 新增枚举类型(Enum)
查看>>
如何整站下载ftp目录内容
查看>>
UNITY引擎变量调用产生不必要内存分配
查看>>
增强我们的Visual Studio
查看>>
Ansible基于playbook批量修改主机名实战
查看>>
WPF 动态绑定listview的列内容
查看>>
loadrunner运行时设置中清空缓存方法
查看>>
Sphinx全文检索之PHP使用教程
查看>>
信号与系统
查看>>
Android Color颜色代码
查看>>
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(1)(转)
查看>>
【总结】移动web问题小结
查看>>