[2018.09.08 T2] 最大土地面积
暂无链接
最大土地面积
题目描述
在某块平面土地上有 N 个点,你可以选择其中的任意四个点,将这片土地围起来,你可以在这块土地上随意打洞。当然,作为一种沉迷于打洞的动物,你希望这四个点围成的多边形面积最大,以满足你打洞的欲望。
输入说明
第 1 行一个正整数 N,接下来 N 行,每行 2 个数 x,y,表示该点的横坐标和纵坐标。
输出格式
最大的多边形面积,答案精确到小数点后 3 位。
样例输入
5
0 0
1 0
1 1
0 1
0.5 0.5
样例输出
1.000
数据规模
对于 30%的数据,4≤N≤500;
对于 100%的数据,4≤N≤2000, |x|,|y|≤100000;
题解
非常裸的旋转卡壳,先求凸包,再在凸包上O(n2)O(n2)O(n^2)枚举对角线,对对角线两侧各维护一个最大三角形即可。
没想到我这种菜鸡也能在考场上A题。
代码
数据没有凸包为三角形的,为了代码的简介所以删掉了特判。
#include<bits/stdc++.h>
#define db double
#define eps 1e-8
using namespace std;
const int M=2005;
struct sd{db x,y;}pt[M],sta[M];
bool operator <(sd a,sd b){return a.x==b.x?a.y<b.y:a.x<b.x;}
bool operator ==(sd a,sd b){return fabs(a.x-b.x)<eps&&fabs(a.y-b.y)<eps;}
db operator *(sd a,sd b){return a.x*b.y-a.y*b.x;}
sd operator +(sd a,sd b){return (sd){a.x+b.x,a.y+b.y};}
sd operator -(sd a,sd b){return (sd){a.x-b.x,a.y-b.y};}
db area(sd a,sd b,sd c){return fabs((b-a)*(c-a))/2.0;}
int n,top=-1;
db ans;
void in(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%lf%lf",&pt[i].x,&pt[i].y);}
void ac()
{sort(pt+1,pt+1+n);for(int i=1;i<=n;++i){for(;top>0&&(sta[top]-sta[top-1])*(pt[i]-sta[top-1])<eps;--top);sta[++top]=pt[i];}for(int k=top,i=n;i>=1;--i){for(;top>k&&(sta[top]-sta[top-1])*(pt[i]-sta[top-1])<eps;--top);sta[++top]=pt[i];}for(int i=0,j,le,ri;i<top-3;++i)for(le=i+1,j=i+2,ri=i+3;j<top;++j){for(;area(sta[i],sta[le],sta[j])<area(sta[i],sta[le+1],sta[j]);le=(le+1)%top);for(;area(sta[i],sta[ri],sta[j])<area(sta[i],sta[ri+1],sta[j]);ri=(ri+1)%top);ans=max(ans,area(sta[i],sta[le],sta[j])+area(sta[i],sta[ri],sta[j]));}printf("%.3lf",ans);
}
int main(){in();ac();}
[2018.09.08 T2] 最大土地面积相关推荐
- 始于2015年11月23日,终于2018年08月08日
留念. 2015年11月23日:在一起 2016年01月17日-21日:北京机场,我们❤ 2016年04月16日:去他所在城市--成都 2016年06月04-06日:第一次小旅游--都江堰.青城山 2 ...
- 2018年08月19日发烧诸事记
2018年08月19日发烧诸事记 关于发烧给敲响的警钟 八月十六日,中午突然觉的有发烧症状,会宿舍喝了些水便回去了,下午上课时情况愈加严重,浑身发冷,无法正常训练,三点多时便去永康街上的社区医疗服务中 ...
- 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language
老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- 2018.09.26朴素贝叶斯算法研究日志
2018.09.26朴素贝叶斯算法研究日志 前些天研究的遗传算法遇到瓶颈,所以转而研究朴素贝叶斯,同时也让自己休息一下,多查询遗传算法的文档然后进一步研究.朴素贝叶斯算法是最简单的一种贝叶斯算法.本文 ...
- 电大计算机网考怎么过,史上最牛--电大计算机网考小抄(考试必备)--2016.09.08【呕心沥血整理、电大考试必过】.doc...
史上最牛--电大计算机网考小抄(考试必备)--2016.09.08[呕心沥血整理.电大考试必过] 计算机网考Windows操作系统及其应用-选择题B A.Ctrl + Alt B.Ctrl + Shi ...
- 带t2芯片的mac装linux,Macbook Air 2018(包含T2芯片)安装Precision Touchpad触摸板驱动...
撰写日期:2020年2月4日 MacBook安装Windows后,触摸板的很多功能不能用了.浪费了MacBook这优秀的触摸板,解决办法是安装github上开源的Windows Precision T ...
- 2018/03/08
2019独角兽企业重金招聘Python工程师标准>>> March 08 2018 Thursday Weather:cloudy 1.需求: 用shell脚本判断输入的日期是否合法 ...
- 开源大数据周刊-2018年08月10日 第96期
资讯 阿里云E-MapReduce新版工作流管理正式上线 新版E-MapReduce工作流管理功能正式发布上线,工作流调度和编排是大数据开发的重要场景.此次升级新增作业DAG执行,作业临时查询等功能, ...
- 2018.09.24-2018.09.30
Linux上的文件管理命令都有哪些,其常用的使用方法及其相关示例演示 2.bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例展示 3,使用命令行展开功能来完成以下练习 4,文件的元 ...
最新文章
- 密码学+赛博朋克,关于密码朋克们的奇妙故事
- STM32使用以下规则对过滤器编号:
- on 和where条件的放置详解
- QT5实践:如何应用窗口菜单
- 超形象!流体版的勾股定理演示动图...
- CUDA GPU编程
- 如何为 MySQL 选择 CPU?
- C++总结学习(一)
- mybatis编写一个查询数据库表的程序
- oracle gbk ebcdic,EBCDIC和GBK/GBK2312的转换
- openlayers3.0叠加天地图底图及注记后再叠加geoserverWMS服务
- ios 设备获取idfa_通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
- Android图片处理之Glide使用大全
- 总结:常见的攻击服务器的手段
- Introduction to Linear Optimization 2.1 多面体和凸集
- 自然语言处理TF-IDF关键词提取算法
- CAD导入卫星地图几种方式
- 5、基于51单片智能手环设计心率计蓝牙app计步器温湿度设计
- Linux查看全部进程的命令
- 【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证