Description

老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大。

Eddy对这道题目百思不得其解,想不通用什么方法来解决,因此他找到了聪明的你,请你帮他解决这个题目。

Input

输入数据包含多组测试用例,每个测试用例的第一行包含一个整数n,表示一共有n个互不相同的点,接下来的n行每行包含2个整数xi,yi,表示平面上第i个点的x与y坐标。你可以认为:3 <= n <= 50000 而且 -10000 <= xi, yi <= 10000.

Output

对于每一组测试数据,请输出构成的最大的三角形的面积,结果保留两位小数。

每组输出占一行。

Sample Input

3
3 4
2 6
3 7
6
2 6
3 9
2 0
8 0
6 6
7 7

Sample Output

1.50
27.00

数据量过大如果直接暴力枚举三个点面积取最大会超时
因为最大三角形的顶点一定在凸包上,所以可以用graham扫描线求凸包缩小数据量再枚举

graham扫描线法

  1. 取得最左下的点的下标,并把其与第一个位置的点交换
  2. 以第一个点为原点水平线为x轴,进行极角排序(或者说与原点连线的斜率排序)
  3. graham扫描线(栈的思想 不过下面的代码用的是数组)
    • 第一个点和第二个点肯定在凸包上
    • 对后续点进行遍历(设为点 x)
      • 取栈顶两个点连线 l
      • 如果 x在l的右边则把栈顶元素出栈(while循环)
      • x入栈

最后得到的栈中的点集就是凸包的点集

极点排序(叉积)

三个点构成的三角形面积

叉积是两个向量所构成的平行四边形的有向面积

因为可能会有多次出栈操作,所以用while循环

P3 -> P4 -> P5 -> P6 -> P5出栈 -> P4出栈

代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h>
#include<stack>
#include<vector>
#include<stdio.h>
#define ll long long
#define inf 0x3f3f3f3f
#define pi 3.1415926535
using namespace std;
struct node
{double x,y;
};
node w[50005],v[50005];
int n,t;
bool cmp(node a,node b)//极角排序(叉积)
{if((a.x-w[0].x)*(b.y-w[0].y)-(a.y-w[0].y)*(b.x-w[0].x)==0)return a.x<b.x;return (a.x-w[0].x)*(b.y-w[0].y)-(a.y-w[0].y)*(b.x-w[0].x)>0;
}
double cj(node a,node b,node c)//叉积  A=a-c    B=b-c(A和B呈右手系返回值>0左手系<0共线=0)
{return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
void graham()//graham扫描线求凸包
{t=1;v[0]=w[0],v[1]=w[1];for(int i=2; i<n; ++i){while(t>1&&cj(w[i],v[t],v[t-1])>=0)--t;v[++t]=w[i];}
}
int main()
{//freopen("text.txt","r",stdin);while(~scanf("%d",&n)){t=0;for(int i=0; i<n; ++i){scanf("%lf %lf",&w[i].x,&w[i].y);if(w[i].y<w[t].y||(w[i].y==w[t].y&&w[i].x<w[t].x))t=i;}swap(w[0],w[t]);//将最左下角的点放在第一个位置sort(w+1,w+n,cmp);//以第一个点为原点对面的点进行极角排序graham();double ans=0;for(int i=0; i<=t; ++i)for(int j=i+1; j<=t; ++j)//从0开始枚举会与前面的有重复for(int k=j+1; k<=t; ++k)if(ans<fabs(cj(v[i],v[j],v[k])))ans=fabs(cj(v[i],v[j],v[k]));if(t>=2)printf("%.2f\n",ans/2);}
}

HDU 2202 最大三角形 (凸包)相关推荐

  1. HDU 2202 最大三角形

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. HDU 2202 计算几何

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. 2202.最大三角形 --计算几何

    参考https://www.cnblogs.com/xiexinxinlove/p/3708147.html https://blog.csdn.net/MyHeaven7/article/detai ...

  4. HDU 1348 Wall ( 凸包周长 )

    链接:传送门 题意:给出二维坐标轴上 n 个点,这 n 个点构成了一个城堡,国王想建一堵墙,城墙与城堡之间的距离总不小于一个数 L ,求城墙的最小长度,答案四舍五入 思路:城墙与城堡直线长度是相等的, ...

  5. HDU - 2091 空心三角形 水题,但是有点坑...

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. poj 1264 hdu 1616 SCUD Busters 凸包+面积计算

    http://poj.org/problem?id=1264 这题很看郁闷,看了很久才明白是什么意思.大致就是有数个国家,每个国家有数个房子,房子相互连接组成的最小周长的多边形为该国家领土,当输入-1 ...

  7. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  8. 张一鸣演讲全文:外部波澜起伏,内心平静如常|字节跳动9周年

    世界在动态变化,外部波澜起伏,内心要保持平静如常. 3月30日,在公司9周年庆上,字节跳动创始人张一鸣发表了演讲<平常心做非常事>,分享了他对于"平常心"的思考:如何以 ...

  9. matlab实现泰森多边形

    前言 原文: <泰森多边形(Voronoi图)的matlab绘制>. 本文已经过原作者授权.如有错误,请批评指正. 泰森多边形介绍 泰森多边形是对空间平面的一种剖分,其特点是多边形内的任何 ...

最新文章

  1. JDBC学习DayTwo
  2. 凸透镜成像实验软件_中考物理凸透镜成像难点解析
  3. Windows下删除Kafka中某个Group
  4. Java基础之this关键字的作用
  5. Java必刷100题
  6. flask第一章:项目环境搭建
  7. GTK+ 2.4 or later isn't available
  8. 2014年英语一阅读理解Text1
  9. android学习笔记---51_编码实现软件界面,把固定不变的界面写到xml中,逻辑改变的写到程序中,
  10. 微信表情暂停使用,漂流瓶功能彻底再见!
  11. 1.3、TetGen网格化过程之描述
  12. 短视频图像处理 OpenGL ES 实践
  13. [iOS]在tableview中用动画效果改变cell的高度
  14. 简仿Path的商店表情弹出模块
  15. 企业财务制度二--会计科目名称和编号(一)1291 分期收款发出商品(转载)
  16. Asp.Net MVC4.0 官方教程 入门指南之八--为Movie模型和库表添加字段
  17. 资源小屋(更新ing.......)
  18. 成都榆熙:拼多多商家都想要提高客单价,但是怎么去提高呢?
  19. python爬虫分析豆瓣中最新电影的影评
  20. DNA甲基化测序方法介绍

热门文章

  1. 考虑多风场出力相关性的可再生能源场景生成/风电场景生成,并通过聚类算法场景削减成几个场景,每个场景都有确定的出现概率
  2. 利用winrar实现自动打包备份的功能!
  3. MySQL高级---1-黑马
  4. php在线客服框架,智能在线客服-框架
  5. 【无标题】Unity之虚拟相机(轨道相机与镜头跟随
  6. Android 正 N 边形圆角头像的实现
  7. Linux(ubuntu16.04)FTP服务器搭建详细步骤
  8. 手把手教你设计CPU-RISC-V处理器读书笔记1:流水线
  9. 漫天樱花表白小程序:“樱花将灿,冬尽风暖“一樱花和你我都想念~(内含多份源码)
  10. PMP考试报名条件是什么?