题目大意:给出二维平面上n个点,求最大的由这些点组成的四边形面积。(n<=2000)

思路:求出凸包后旋转卡壳枚举对踵点对作为四边形的对角线,枚举或二分另外两个点,复杂度O(n^2)或O(nlogn)。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define MN 2000
#define eps 1e-7
struct P{double x,y;}p[MN+];
P operator-(P a,P b){return (P){a.x-b.x,a.y-b.y};}
double operator*(P a,P b){return a.x*b.y-a.y*b.x;}
double area(P a,P b,P c){return fabs((b-a)*(c-a));}
int dcmp(double x){return fabs(x)<eps?:x<?-:;}
bool cmp(P a,P b){double c=(a-p[])*(b-p[]);return dcmp(c)?dcmp(c)>:a.y<b.y;}
int n;double ans;
void cal(int l,int r)
{
double x1=,x2=;if(l>r)swap(l,r);int i;
for(i=l;++i<r;)x1=max(x1,area(p[l],p[r],p[i]));
for(i=r;++i<=n;)x2=max(x2,area(p[l],p[r],p[i]));
for(i=;i<l;++i)x2=max(x2,area(p[l],p[r],p[i]));
ans=max(ans,x1+x2);
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=j=;i<n;++i)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
if(p[i].y==p[j].y?p[i].x<p[j].x:p[i].y<p[j].y)j=i;
}
swap(p[],p[j]);sort(p+,p+n,cmp);
for(j=,i=;i<n;p[++j]=p[i++])
while(j&&dcmp((p[i]-p[j])*(p[j]-p[j-]))>=)--j;
for(p[n=++j]=p[i=],j=;i<n;cal(i,j),cal(++i,j))
while(area(p[i],p[i+],p[j+])>area(p[i],p[i+],p[j]))++j==n?j=:;
printf("%.3lf",ans/);
}

[BZOJ]1069: [SCOI2007]最大土地面积的更多相关文章

  1. bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2277  Solved: 853[Submit][Stat ...

  2. BZOJ 1069: [SCOI2007]最大土地面积 [旋转卡壳]

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

  3. BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)

    题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...

  4. ●BZOJ 1069 [SCOI2007]最大土地面积

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1069 题解: 计算几何,凸包,旋转卡壳 其实和这个题差不多,POJ 2079 Triangl ...

  5. bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069 发现 n 可以 n^2 .所以枚举对角线,分开的两部分三角形就可以旋转卡壳了. 注意坐 ...

  6. bzoj 1069: [SCOI2007]最大土地面积 凸包+旋转卡壳

    题目大意: 二维平面有N个点,选择其中的任意四个点使这四个点围成的多边形面积最大 题解: 很容易发现这四个点一定在凸包上 所以我们枚举一条边再旋转卡壳确定另外的两个点即可 旋(xuan2)转(zhua ...

  7. BZOJ 1069 [SCOI2007]最大土地面积 ——计算几何

    枚举对角线,然后旋转卡壳即可. #include <map> #include <cmath> #include <queue> #include <cstd ...

  8. 1069: [SCOI2007]最大土地面积

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

  9. 【BZOJ】1069: [SCOI2007]最大土地面积(凸包+旋转卡壳)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1069 显然这四个点在凸包上,然后枚举两个点找上下最大的三角形即可. 找三角形表示只想到三分QAQ.. ...

随机推荐

  1. NetFPGA-1G-CML Demo --- openflow_switch

    环境 ubuntu 14.04 vivado 15.2 ise 14.6 更多基础配置:http://www.cnblogs.com/wpqwpq/p/6771568.html 运行步骤 step1: ...

  2. Beta冲刺Day7

    项目进展 李明皇 今天解决的进度 部分数据传递和使用逻辑测试 林翔 今天解决的进度 服务器端查看个人发布的action,修改已发布消息状态的action,仍在尝试使用第三方云存储功能保存图片 孙敏铭 ...

  3. scrapy 爬取当当网产品分类

    #spider部分import scrapy from Autopjt.items import AutopjtItem from scrapy.http import Request class A ...

  4. Vue filter介绍及详细使用

    Vue filter介绍及其使用 VueJs 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回需要的结果. Vue.js自带了一些默认过滤器例如: capitalize 首字母大写 uppe ...

  5. leetcode题解 6.ZigZag Conversion

    6.ZigZag Conversion 题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a gi ...

  6. List集合就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识. 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是 ...

  7. Python内置函数(42)——hash

    英文文档: hash(object)Return the hash value of the object (if it has one). Hash values are integers. The ...

  8. jhipster生成项目无法使用restful请求,报access_denied 403错误

    写在前边: 我们的微服务是注册中心.uaa.gateway为基础,添加微服务应用,昨天下午在测试jhipster的增删改查,因为jhipster生成的代码都是restful的,好不容易找到网关配置的映 ...

  9. Swagger: 一个restful接口文档在线生成+功能测试软件

    一.什么是 Swagger? Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 ...

  10. Angular 学习笔记 ( 链接服务器 )

    ng 是做前端开发的, 所以通常我们会配上一个 API server. 本地调试时通常使用 proxy https://github.com/angular/angular-cli/blob/mast ...