1069: [SCOI2007]最大土地面积

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 3438  Solved: 1373
[Submit][Status][Discuss]

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

这四个点一定是凸包上的点,所以要先求一波凸包

之后O(n^2)枚举四边形的对角线,只要在对角线两边各找一个点使得构成的两个三角形面积最大即可

因为当对角线逆时针旋转时,使得三角形面积最大的两个点也一定是跟着逆时针旋转,

所以寻找这两个点总体复杂度只有O(n)

旋转卡壳:(有两篇讲的不错的blog,我就。。。)

http://blog.csdn.net/hanchengxi/article/details/8639476

http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.html

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<algorithm>
using namespace std;
typedef struct
{double x;double y;
}Point;
Point top1, s[2005], q[2005];
double Cross(Point a, Point b, Point c)
{return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
bool comp(Point a, Point b)
{if(Cross(a, b, top1)>0)return 1;else if(Cross(a, b, top1)==0 && fabs(a.x-top1.x)<fabs(b.x-top1.x))return 1;return 0;
}
int main(void)
{double ans;int n, i, j, top, p1, p2;while(scanf("%d", &n)!=EOF){top1.x = top1.y = INT_MAX;for(i=1;i<=n;i++){scanf("%lf%lf", &s[i].x, &s[i].y);if(s[i].y<top1.y || s[i].y==top1.y && s[i].x<top1.x)top1 = s[i];}sort(s+1, s+n+1, comp);q[1] = s[1], q[2] = s[2], top = 2;for(i=3;i<=n;i++){while(top>1 && Cross(q[top-1], s[i], q[top])>=0)top--;q[++top] = s[i];}ans = 0;for(i=1;i<=top;i++){p1 = (i+2)%top+1, p2 = i%top+1;for(j=i+2;j<=top;j++){while(Cross(q[p1+1], q[i], q[j])>=Cross(q[p1], q[i], q[j]))p1 = p1%top+1;while(Cross(q[i], q[p2+1], q[j])>=Cross(q[i], q[p2], q[j]))p2 = p2%top+1;ans = max(ans, (Cross(q[p1], q[i], q[j])+Cross(q[i], q[p2], q[j]))/2);}}printf("%.3f\n", ans);}return 0;
}

bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)相关推荐

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

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

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

    旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...

  3. 1069: [SCOI2007]最大土地面积 - BZOJ

    Description 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. Input 第1行一个正整数N,接下来N行,每行2个数x,y ...

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

    传送门 考虑枚举任意222个点,那么只需要枚举第二个点的时候旋转卡壳就可以O(n)O(n)O(n)得到最远点对了 #include<bits/stdc++.h> using namespa ...

  5. bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积

    在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...

  6. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 1435  Solv ...

  7. [旋转卡壳]最大土地面积 AcWing2617

    在某块平面土地上有 N 个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 输入格式 第 1 行一个正整数 N. 接下来 N 行,每行 2 个数 x,y,表 ...

  8. 算法复习——凸包加旋转卡壳(poj2187)

    题目: Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest ...

  9. P4166 [SCOI2007]最大土地面积

    传送门 首先,四边形的四个点肯定都在凸包上(别问我为什么我也不知道,感性理解一下好了) 那么我们可以求出凸包之后\(O(n^4)\)暴力枚举,据说在随机数据下凸包上的点只有\(O(logn)\)个可过 ...

最新文章

  1. 让chrome浏览器支持跨域
  2. 让Dreamweaver支持phtml
  3. maven项目里面程序不能正确读取resources目录配置文件
  4. 如何逃离「信息茧房」?
  5. Python一些很实用的知识
  6. A - 敌兵布阵 - hdu 1166
  7. GoogleTest测试框架介绍(二)
  8. mysql的number范围_数据库number类型精度实用分析
  9. win10计算机三级密码设置,Win10系统下共享文件夹如何设置密码访问?
  10. Learn Git Branching 答案汇总
  11. 洛谷 P1315 观光公交
  12. 数独终局生成及残局求解
  13. Par.ici法语听写练习A1 -L13
  14. 后羿采集器怎么导出数据_后羿采集器教程:如何采集东方财富网股票数据
  15. 渗透测试学习之日常打靶THE PLANETS: EARTH
  16. 物联网无线通信技术蓝牙、wifi、zigbee
  17. HCS12XEP100 ATD模块定时中断采样
  18. java编一个求圆柱表面积_Java:输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积...
  19. 哈工大c语言编程题,哈工大c语言练习题
  20. Java校验框架使用@Valid、@Validated、OVAL+Groovy

热门文章

  1. python编程可以自学么-终于发现怎么自学python编程
  2. 0基础学python有多难-0基础纯小白学Python,请注意这2个坑
  3. 学好python工资一般多少-参加Python培训就业薪资是多少?老男孩学Python好吗?
  4. 语音识别控制设计之声控小汽车的实现
  5. vue前端动态分页模板(记录)
  6. Navicate 如何导出数据库中的存储过程、事件、视图等?
  7. 计算机网络实验5以太网链路帧实验,计算机网络实验-使用Wireshark分析以太网帧与ARP协议.docx...
  8. 【java笔记】File类(1)概述,静态成员,构造方法
  9. 蓝桥c++2013真题:逆波兰表达式(代码填空题)
  10. linux md5接口,md5-linux_shell(示例代码)