最大三角形

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4015    Accepted Submission(s): 1433

Problem 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
 
Author
Eddy
 
代码:
 //最大三角形的顶点一定是凸包的顶点,先求凸包再三重循环用向量算最大的三角形面积。刚开始以为这样会超时竟然没有
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,top;
struct nod
{
double x,y;
}p[],que[];
int xy(nod p0)
{
p0.x-=p[].x;
p0.y-=p[].y;
if(p0.x>=&&p[].y>=) return ;
if(p[].x<=&&p[].y>) return ;
if(p[].x<&&p[].y<=) return ;
if(p[].x>=&&p[].y<) return ;
}
double chaji(nod p0,nod p1,nod p2)
{
return ((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x));
}
bool cmp(nod p1,nod p2)
{
int L1=xy(p1),L2=xy(p2);
if(L1==L2)
{
double tem=chaji(p[],p1,p2);
if(tem>) return ;
if(tem<) return ;
if(tem==)
return p1.x<p2.x;
}
else return L1<L2;
}
void tubao()
{
top=;
que[top].x=p[].x;que[top++].y=p[].y;
que[top].x=p[].x;que[top++].y=p[].y;
que[top].x=p[].x;que[top].y=p[].y;
for(int i=;i<=n;i++)
{
while(chaji(que[top-],que[top],p[i])<=)
top--;
que[++top].x=p[i].x;
que[top].y=p[i].y;
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
double Minx=,Miny=;
int Mini;
for(int i=;i<n;i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
if(p[i].y<Miny)
{
Miny=p[i].y;
Minx=p[i].x;
Mini=i;
}
else if(p[i].y==Miny&&p[i].x<Minx)
{
Minx=p[i].x;
Mini=i;
}
}
if(n==||n==)
{
printf("0.00\n");
continue;
}
double tem=p[].x;
p[].x=p[Mini].x;
p[Mini].x=tem;
tem=p[].y;
p[].y=p[Mini].y;
p[Mini].y=tem;
sort(p+,p+n,cmp);
p[n].x=p[].x;p[n].y=p[].y;
tubao();
double ans=0.0;
for(int i=;i<=top-;i++)
for(int j=i+;j<=top-;j++)
for(int k=j+;k<=top;k++)
{
ans=max(fabs(chaji(que[i],que[j],que[k])),ans);
}
printf("%.2lf\n",ans/);
}
return ;
}

HDU 2202 计算几何的更多相关文章

  1. hdu 2108:Shape of HDU(计算几何,判断多边形是否是凸多边形,水题)

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. *HDU 2108 计算几何

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  3. hdu 2202 最大三角形 (凸包)

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

  4. HDU 5784 (计算几何)

    Problem How Many Triangles (HDU 5784) 题目大意 给定平面上的n个点(n<2000),询问可以组成多少个锐角三角形. 解题分析 直接统计锐角三角形较困难,考虑 ...

  5. hdu 4720 计算几何简单题

    昨天用vim练了一道大水题,今天特地找了道稍难一点的题.不过也不是很难,简单的计算几何而已.练习用vim编码,用gdb调试,结果居然1A了,没调试...囧... 做法很简单,无非就是两种情况:①三个巫 ...

  6. HDU 2202 最大三角形(凸包)

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

  7. HDU 6205[计算几何,JAVA]

    题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=6206] 题意: 给出不共线的三个点,和一个点(x,y),然后判断(x,y)在不在这三个点组成的圆外. ...

  8. hdu 3320 计算几何(三维图形几何变换)

    openGL Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. *HDU 1007 计算几何

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. 数据库 之MySQL 简单教程

      So Easy系列之MySQL数据库教程 1.   数据库概述 1.1.  数据库概述 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和 ...

  2. Java注解基础概念总结

    注解的概念 注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations.注解与类.接口.枚举在同一个层次 ...

  3. java项目上线过程

    关于如何将Javaweb上线,部署到公网,让全世界的人都可以访问的问题.小编将作出系列化,完整的流程介绍. 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http://z ...

  4. CC2540自己的配置文件

    首先要指出,字段属性有notify的不能同时有read,write属性,别问哥,哥也不知道,反正我做的就不能notify,只能read,write. 分享的程序段第一字段有notify属性,第二字段r ...

  5. bootstrap-select js jQuery控制select属性变化

    bootstrap-select我想大家都不陌生是一个前端下拉框的插件非常好用,在select的标签中设置属性可以做很多功能控制,不过初始化之后怎么去修改网上找遍中文英文也没有一个交代自己研究好久研究 ...

  6. git tag使用标记

    git跟其它版本控制系统一样,可以打标签(tag), 作用是标记一个点为一个版本号,如0.1.3, v0.1.7, ver_0.1.3.在程序开发到一个阶段后,我们需要打个标签,发布一个版本,标记的作 ...

  7. 使用VBScript实现设置系统环境变量的小程序

    本人有点桌面洁癖,桌面上只放很少的东西,很多软件都用快捷键调出.最近频繁用到一个软件,我又不想放个快捷方式在桌面,也不想附到开始菜单,于是乎想将其所在目录附加到系统环境变量Path上,以后直接在运行中 ...

  8. llvm-summary

    llvm 学习总结 Type define int类型 IntegerType::get(mod->getContext(), 32) long类型 IntegerType::get(mod-& ...

  9. xamarin(3.9.236)里DATETIMENOW的错误。

    [ERROR] FATAL UNHANDLED EXCEPTION: System.EntryPointNotFoundException: monodroid_get_system_property ...

  10. java相关的小问题

    对线程异常的处理 调用Thread的静态方法Thread.setDefaultUncaughtExceptionHandler()