题目大意:给定n(3<=n<=50000)个点,求其中任意三个点组成的三角形面积最大,输出该面积.

题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2202

解题思路:用graham求离散点凸包,随后暴力枚举求最大三角形面积

/*
author:panzg
time:2013/10/22
graham求凸包
*/
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct point
{
double x,y;
};
point p[],s[];
bool mult(point sp,point ep,point op)
{
return (sp.x-op.x)*(ep.y-op.y)>=(ep.x-op.x)*(sp.y-op.y);
}
bool operator < (const point &l, const point &r)
{
return l.y < r.y || (l.y == r.y && l.x < r.x);
}
int graham(point pnt[],int n,point res[])
{
int i,len,top=;
sort(pnt,pnt+n);
if(n==) return ;
res[]=pnt[];
if(n==) return ;
res[]=pnt[];
if(n==) return ;
res[]=pnt[];
for(i=; i<n; i++)
{
while(top&&mult(pnt[i],res[top],res[top-]))
top--;
res[++top]=pnt[i];
}
len=top;
res[++top]=pnt[n-];
for(i=n-; i>=; i--)
{
while(top!=len&&mult(pnt[i],res[top],res[top-])) top--;
res[++top]=pnt[i];
}
return top;
}
double area(point i,point j,point k)
{
double s=fabs(double(i.x*j.y+j.x*k.y+k.x*i.y-
i.y*j.x-j.y*k.x-k.y*i.x)/);
return s;
}
double maxx(double x,double y)
{
return x>y?x:y;
}
int main()
{
int n,m,i,j,k; double ans,t,t1;
freopen("input.txt","r",stdin);
while(cin>>n&&n!=)
{
m=;
memset(p,,sizeof(p));
memset(s,,sizeof(s));
for(i=; i<n; i++)
cin>>p[i].x>>p[i].y;
m=graham(p,n,s); //求凸包 //暴力枚举所有的三角形
for(ans=,i=; i<=m; i++)
for(j=i+; j<=m; j++)
for(k=j+; k<=m; k++)
ans=maxx(ans,area(s[i],s[j],s[k]));
printf("%.2f\n",ans);
}
return ;
}

hdoj 2202 最大三角形的更多相关文章

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

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

  2. hdoj 2091 空心三角形

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

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

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

  4. hdu 2202 最大三角形_凸包模板

    题意:略 思路:直接套用凸包模板 #include <iostream> #include <cstdio> #include <cmath> #include & ...

  5. HDU 2202 最大三角形

    题解:先算出凸包,然后枚举凸包上的点计算即可 #include <cstdio> #include <cmath> #include <cstdlib> #incl ...

  6. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

  7. hdoj 2039 三角形

    Problem Description 给定三条边,请你判断一下能不能组成一个三角形.   Input 输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C.其中A,B,C & ...

  8. HDOJ(HDU) 2091 空心三角形

    Problem Description 把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出 ...

  9. HDOJ 1249 三角形『平面分隔』

    很水拉   为了记规律- - 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1249 分隔平面公式 下面是我自己查找的公式,没有推到过程,但可以给一些链 ...

随机推荐

  1. Codevs 1231 最优布线问题

    题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外 ...

  2. Android基本知识

         Android是Google公司于2007年发布的基于Linux内核的手机操作系统.应用层主要以java为编程语言,应用层分为两层,函数层(Library) 和虚拟机(Virtual).中间 ...

  3. C语言 数组输出,冒泡排序法,沉底排序法,二维数组输出,输出字母列长度,从随机数组中找重复数

    #include <stdio.h> #define sum 3+4//宏定义是原封不动的使用used for test4 #include <time.h>//used fo ...

  4. 安装新版本的mysql数据库

    默认情况,在CentOS 6.8 下通过yum安装的是5.1.73版本,现在需求是安装5.7版本. -------------------------------------------------- ...

  5. Fedora 20 创建桌面快捷方式

    创建desktop文件 sudo touch /usr/share/applications/sublime.desktop 添加内容 [Desktop Entry] Encoding=UTF-8 N ...

  6. 关于Silverlight调用天气预报接口问题

    问题:因Silverlight客户端不能直接调用webservice接口(外网天气接口),调用会出现跨域访问的问题,即使添加了跨域文件也不好使.解决方法如下 解决方法一:1.在服务端建立一个wcf服务 ...

  7. PHP 超级全局变量

    超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作 ...

  8. sqlServer2008 手工注入

    接着上一篇的<mysql手工注入> 参考:http://hi.baidu.com/ciqing_s/item/971bf994365130accc80e5ed http://hi.baid ...

  9. Requests库的几种请求 - 通过API操作Github

    本文内容来源:https://www.dataquest.io/mission/117/working-with-apis 本文的数据来源:https://en.wikipedia.org/wiki/ ...

  10. xv6实验环境搭建

    安装bochs 因为要运行的是xv6,所以不能直接使用 apt-get 直接获取软件.apt-get获取到的软件不支持SMP (Symmetric Multi-Processing).因此,需要下载源 ...