hdu_2202_凸包求最大三角形
来源:互联网 发布:linux 安装apache php 编辑:程序博客网 时间:2024/05/20 06:53
//先求凸包,枚举凸包上的点求最大三角形
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
struct point
{
int x,y;
}a[50001],stack[50001],flag;
int n;
int sect(point a,point b,point c)
{
return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
}
double dis(point a,point b)
{
return sqrt((double)((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));
}
double area(point a,point b,point c)
{
double x=dis(a,b),y=dis(a,c),z=dis(b,c);
double p=(x+y+z)/2.0;
double s=p*(p-x)*(p-y)*(p-z);
return sqrt(s);
}
int cmp(point a,point b)
{
return sect(a,b,flag)>1e-8;
}
double graham()
{
int top=1;
stack[0]=a[0];
stack[1]=a[1];
int i,j,k;
for(i=2;i<n;i++)
{
while(top>0&§(a[i],stack[top],stack[top-1])>0)top--;
stack[++top]=a[i];
}
/*printf("/n");
for(i=0;i<=top;i++)
printf("%d %d/n",stack[i].x,stack[i].y);
printf("/n");
*/
double max=0.0,s;
for(i=0;i<top;i++)
for(j=i+1;j<top;j++)
for(k=j+1;k<=top;k++)
{
s=area(stack[i],stack[j],stack[k]);
if(s>max)
max=s;
}
return max;
}
int main()
{
while(scanf("%d",&n)!=EOF&&n!=-1)
{
flag.x=flag.y=100000;
int i,j,index;
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
if(a[i].x<flag.x||flag.x==a[i].x&&flag.y>a[i].y)
{
index=i;
flag=a[i];
}
}
a[index]=a[0];
a[0]=flag;
sort(a+1,a+n,cmp);
printf("%.2lf/n",graham());
}
return 0;
}
- hdu_2202_凸包求最大三角形
- poj2079凸包求最大三角形面积
- 最大三角形
- 最大三角形
- hdu 2202 最大三角形
- 最大面积三角形
- 最大周长三角形
- HDU 2202最大三角形
- HDU2202最大三角形
- 最大周长三角形问题
- 三角形最大和问题
- 最大三角形 HDU
- HDU 2022 最大三角形(点集合中最大三角形)
- HDU 2202 最大三角形(求凸包中最大三角形面积)
- HDU 2202 求最大三角形
- hdu acm 2202 最大三角形
- 【凸包】HDU2202最大三角形
- hdu2202 最大三角形 凸包
- 把程序的定义与实现部分用头文件与源文件分开
- windows下注入dll的技术(windows下注入dll的技术)
- Windows下安装配置RadRails指南
- 用Ubuntu破解wep加密的wifi
- 继续研究Gloox3
- hdu_2202_凸包求最大三角形
- 选择数字报软件的10大技巧
- 自删除
- 单片机入门的方法与误区(个人觉得杜洋的分析比较好,分享一下)
- 8051、AVR和ARM的关系及实际情况 推荐
- Ubuntu下安装tcpdump
- 自己动手做计算机-计算机科学的本质
- Linux/Ubuntu下 静态编译Qt程序
- jstat监控gc情况