Description

  在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成
的多边形面积最大。

Input

  第1行一个正整数N,接下来N行,每行2个数x,y,表示该点的横坐标和纵坐标。

Output

  最大的多边形面积,答案精确到小数点后3位。

Sample Input

5
0 0
1 0
1 1
0 1
0.5 0.5

Sample Output

1.000

HINT

数据范围 n<=2000, |x|,|y|<=100000

Solution

显然四个点都在凸包上啊!

显然的,我们枚举对角线,我们现在的问题是找离对角线最远的点是哪两个点

于是我们发现,当A固定,C变为逆时针的下一个点的时候,

B,D也一定是单调逆时针变动的

这里运用旋转卡壳的思想

所以这题本质是旋转卡壳,只是更加简单了

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
#define il inline
#define re register
using namespace std;
typedef double db;
const int N=;
const db eps=1e-;
struct P{db x,y;} a[N],s[N];
int n,top;db ans=;
il P operator-(P a,P b){
return (P){a.x-b.x,a.y-b.y};
}
il db operator*(P a,P b){
return a.x*b.y-a.y*b.x;
}
il db S(P a,P b,P c){
return fabs((a-b)*(a-c))/;
}
il db dis(P a){
return a.x*a.x+a.y*a.y;
}
il db cmp(P x,P y){
return (x-a[])*(y-a[])>;
}
il void print(P a){
printf("(%lf,%lf)\n",a.x,a.y);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
}
for(int i=;i<=n;i++)
if(a[i].y<a[].y||(a[i].y==a[].y&&a[i].x<a[].x)) swap(a[],a[i]);
sort(a+,a+n+,cmp);
s[]=a[];s[]=a[];top=;
for(int i=;i<=n;i++){
while(top>&&(a[i]-s[top-])*(s[top]-s[top-])>=) top--;
s[++top]=a[i];
}
if(top==){
ans=S(s[],s[],s[])+S(s[],s[],s[]);
printf("%.3lf",ans);
return ;
}
// for(int i=1;i<=top;i++) print(s[i]);
for(int i=;i<top;i++) s[i]=s[i+];
n=top;
for(int i=;i<n;i++){
for(int j=(i+)%n,k=(i+)%n,l=(i+)%n;k!=(i-+n)%n;k=(k+)%n){
while(S(s[i],s[j],s[k])<S(s[i],s[(j+)%n],s[k])) j=(j+)%n;
while(S(s[i],s[l],s[k])<S(s[i],s[(l+)%n],s[k])) l=(l+)%n;
// cout<<i<<" "<<j<<" "<<k<<" "<<l<<endl;
ans=max(S(s[i],s[j],s[k])+S(s[i],s[k],s[l]),ans);
}
}
printf("%.3lf",ans);
return ;
}

【bzoj1069】最大土地面积的更多相关文章

  1. 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2707  Solved: 1053[Submit][Sta ...

  2. bzoj1069 SCOI2007 最大土地面积

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2560  Solved: 983 Description ...

  3. bzoj1069 [SCOI2007]最大土地面积 旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3767  Solved: 1501[Submit][Sta ...

  4. BZOJ1069 SCOI2007最大土地面积(凸包+旋转卡壳)

    求出凸包,显然四个点在凸包上.考虑枚举某点,再移动另一点作为对角线,容易发现剩下两点的最优位置是单调的.过程类似旋转卡壳. #include<iostream> #include<c ...

  5. BZOJ1069 [SCOI2007]最大土地面积 【凸包 + 旋转卡壳】

    题目链接 BZOJ1069 题解 首先四个点一定在凸包上 我们枚举对角线,剩下两个点分别是两侧最远的点 可以三分,复杂度\(O(n^2logn)\) 可以借鉴旋转卡壳的思想,那两个点随着对角线的一定单 ...

  6. [BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)

    题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成. 的多边形面积最大.n<=2000. 先求凸包,再枚举对角线,随着对角线的斜率上升,另外两 ...

  7. [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3669  Solved: 1451[Submit][Sta ...

  8. [Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3629  Solved: 1432[Submit][Sta ...

  9. BZOJ1069 SCOI2007 最大土地面积 凸包、旋转卡壳

    传送门 在这里假设可以选择两个相同的点吧-- 那么选出来的四个点一定会在凸包上 建立凸包,然后枚举这个四边形的对角线.策略是先枚举对角线上的一个点,然后沿着凸包枚举另一个点.在枚举另一个点的过程中可以 ...

随机推荐

  1. Docker:一个装应用的容器

    一:简介:你是否经历过“我本地运行没问题啊!““哪个哥们有写死循环了““完了,服务器撑不住了“等等问题,docker就是这么帮你解决问题的工具,它可以帮你把web应用自动化打包和发布,在服务型环境下进 ...

  2. 20155339 Exp5 MSF基础应用

    20155339 Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode. 答: exploit是通过自己选择的漏洞和载荷进行攻击的一个过程. pay ...

  3. MiZ702学习笔记9——XADC采集片上数据PS版

    这次借助zynq的内嵌的XADC来采集zynq内部的一些参数: •VCCINT:内部PL核心电压 •VCCAUX:辅助PL电压 •VREFP:XADC正参考电压 •VREFN:XADC负参考电压 •V ...

  4. Caffe上手教程

    Caffe上手教程 入门系列FAQ72 在Unbuntu上安装Caffe828 Windows下安装Caffe1.4K Caffe框架上手教程1.2K Caffe编译运行调试462 Caffe 电脑配 ...

  5. HNOI2019 摸鱼记

    感觉准备省选时有点浮躁,没有准备联赛时那样认真, 希望能将这次省选当做一个教训吧QAQ. Day -inf 基本上把要学的东西都学了,至少做到了自己心里有底. Day 0 乒乓球室没开差评,打隔膜不带 ...

  6. pycharm自动生成头文件注释

    1.在file->settings->file and code templates->python script即可自定制pycharm创建文件自动生成的头文件注释信息 2.创建p ...

  7. 谷歌商店高级搜索 Google play advanced search

    这个问题一直搜索了很久都没有答案,后来在StackOverflow上提问,很久也没人回答. 详见我的SO:https://stackoverflow.com/questions/52939493/ho ...

  8. 软件测试_APP测试_兼容性测试

    APP的兼容测试主要就是测试APP的安装.启动.运行.卸载测试,以及安装时间 .启动时间.CPU占用.内存占用.流量耗用.电量耗用等性能上的测试. 兼容性测试点: 一.内部兼容性: 1.与本地和其他主 ...

  9. unity纯粹物理驱动方式

    首先见官方文档 In most cases you should not modify the velocity directly, as this can result in unrealistic ...

  10. React笔记-事件注册

    事件机制 本系列以React v16.8.3为基础进行源码分析 React事件主要分为两部分: 事件注册与事件分发.下面先从事件注册说起. 事件注册 假设我们的程序如下: <!DOCTYPE h ...