题意:给定一些点,求最大三角形面积
/*
凸包
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
//#include<map>
#include<math.h>
using namespace std;
typedef long long ll;
//typedef __int64 int64;
const int maxn = 1000005;
const int inf = 0x7fffffff;
const double pi=acos(-1.0);
struct node{
int x,y;
bool operator <( const node & p ) const {
return y<p.y||(y==p.y&&x<p.x);
}
};
node pnt[ maxn ],res[ maxn ];
int cross ( node sp,node ep,node op ){
return ( sp.x-op.x )*( ep.y-op.y )-( sp.y-op.y )*( ep.x-op.x );
}
int dis2( node a,node b ){
return ( a.x-b.x )*( a.x-b.x )+( a.y-b.y )*( a.y-b.y );
}
int garham( int n ){
int top=1;
sort( pnt,pnt+n );
if( n==0 ) return 0;
else res[ 0 ]=pnt[ 0 ];
if( n==1 ) return 1;
else res[ 1 ]=pnt[ 1 ];
if( n==2 ) return 2;
else res[ 2 ]=pnt[ 2 ];
for( int i=2;i<n;i++ ){
while( top>0&&cross( res[ top-1 ],pnt[ i ],res[ top ] )>=0 )
top--;
res[ ++top ]=pnt[ i ];
}
int len=top;
res[ ++top ]=pnt[ n-2 ];
for( int i=n-3;i>=0;i-- ){
while( top!=len&&cross( res[ top-1 ],pnt[ i ],res[ top ] )>=0 )
top--;
res[ ++top ]=pnt[ i ];
}
return top;
}
int main(){
int n;
while( scanf("%d",&n)!=EOF ){
for( int i=0;i<n;i++ )
scanf("%d%d",&pnt[ i ].x,&pnt[ i ].y);
int cnt=garham( n );
double ans=0;
for( int i=0;i<cnt;i++ ){
for( int j=i+1;j<cnt;j++ ){
for( int k=j+1;k<cnt;k++ ){
ans=max( ans,( 0.5*cross( res[ j ],res[ k ],res[ i ] ) ) );
}
}
}
printf("%.2lf\n",ans);
}
return 0;
}
分享到:
相关推荐
凸包经典入门,求凸包周长.00000000000000000000000
6. **数学与计算几何**:2201-2250号题目可能涵盖组合数学、数论、几何算法,如凸包、最近点对等。 7. **贪心算法**:贪心策略通常用于每一步都做出局部最优决策,以达到全局最优。2251-2300号题目可能需要使用贪心...
### hdu题目分类知识点概述 本篇将对“hdu题目分类”中提及的各种类型问题进行详细介绍,旨在帮助读者更好地理解这些题目所涉及的核心概念和技术点,并为编程竞赛中的实战训练提供参考。以下是对每道题目的具体分析...
【HDU——ACM.zip】压缩包文件是一个专门为准备ACM(国际大学生程序设计竞赛)集训而设计的资源集合,包含了多个关键算法领域的详细讲解。这个资源包旨在帮助参赛者提升算法理解与编程能力,涵盖了多项在算法竞赛中...
理解和掌握这些属性对于后续的计算几何问题,如求凸包等,都具有基础性作用。 **第二单元:多边形面积和重心** 在这一单元,重点讲解了如何计算简单多边形的面积和重心。简单多边形指的是不自相交的多边形。给定一...
- **凸包定义**:对于平面上的一组点,其凸包是指包含这组点的所有凸多边形中边界最小的一个。 - **构建过程**:寻找一组点中最左下角的点作为起点,然后按逆时针方向构建边界。 ##### 2.2 求凸包的几种算法 - **...
压缩包中的"HDUACM2010版_07)计算几何基础.ppt"很可能是一个讲座或教程的幻灯片,可能涵盖了计算几何的基本概念、核心算法以及一些经典问题的解决方案。对于初学者,这是一个很好的起点,可以深入理解计算几何的...
5. **计算几何**:点线面的关系、凸包、最近点对等问题,常常在图形相关的题目中出现。 6. **位操作**:在某些优化算法中,位操作可以提高效率,如快速幂、位运算求异或等。 讲义中可能还会包含以下内容: 7. **...
平面最近点对(HDU1007) - **问题描述**:给定平面上的一组点,找到距离最近的两点。 - **算法思想**:通过分治法实现,将点集分为左右两部分,分别求出左右两侧的最近点对,然后再寻找跨越这两部分的最近点对。 -...
2.18.1 HDU4656 卷积取模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.19 其它公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.19.1 Polya . . . ....
常见问题包括直线与直线、圆的交点计算,多边形的面积、凸包问题等。掌握向量运算、极坐标的使用,以及了解平面几何的基本定理,对解决计算几何问题至关重要。 三、贪心算法 贪心算法是一种局部最优解策略,每次...
【标题】"HDOJ.rar_HD_HDOJ" 是一个与HDU(杭州电子科技大学)在线判题系统HDOJ相关的压缩包文件,其中包含了大量编程题目的源代码。 【描述】提到,这个压缩包包含了几百道HDOJ题目的源代码,这意味着它是一个宝贵...
【杭电ACM分类】是针对杭州电子科技大学(HDU)在线判题系统(OJ)中的编程竞赛题目进行的一种整理和归类方式。这些竞赛题目通常涉及算法设计、数据结构、数学应用等多个方面,旨在提升参赛者的编程思维和解决实际...