`
xxx0624
  • 浏览: 31731 次
文章分类
社区版块
存档分类
最新评论

HDU3934+凸包

 
阅读更多

题意:给定一些点,求最大三角形面积

/*
凸包
*/
#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;
}


分享到:
评论

相关推荐

    hdu1392 代码

    凸包经典入门,求凸包周长.00000000000000000000000

    HDU-2000-2099.rar_hdu

    6. **数学与计算几何**:2201-2250号题目可能涵盖组合数学、数论、几何算法,如凸包、最近点对等。 7. **贪心算法**:贪心策略通常用于每一步都做出局部最优决策,以达到全局最优。2251-2300号题目可能需要使用贪心...

    hdu题目分类

    ### hdu题目分类知识点概述 本篇将对“hdu题目分类”中提及的各种类型问题进行详细介绍,旨在帮助读者更好地理解这些题目所涉及的核心概念和技术点,并为编程竞赛中的实战训练提供参考。以下是对每道题目的具体分析...

    HDU——ACM.zip

    【HDU——ACM.zip】压缩包文件是一个专门为准备ACM(国际大学生程序设计竞赛)集训而设计的资源集合,包含了多个关键算法领域的详细讲解。这个资源包旨在帮助参赛者提升算法理解与编程能力,涵盖了多项在算法竞赛中...

    hdu acm教案4

    理解和掌握这些属性对于后续的计算几何问题,如求凸包等,都具有基础性作用。 **第二单元:多边形面积和重心** 在这一单元,重点讲解了如何计算简单多边形的面积和重心。简单多边形指的是不自相交的多边形。给定一...

    ACM-ICOC培训资料汇编(7)计算几何

    - **凸包定义**:对于平面上的一组点,其凸包是指包含这组点的所有凸多边形中边界最小的一个。 - **构建过程**:寻找一组点中最左下角的点作为起点,然后按逆时针方向构建边界。 ##### 2.2 求凸包的几种算法 - **...

    计算几何 算法几何 程序

    压缩包中的"HDUACM2010版_07)计算几何基础.ppt"很可能是一个讲座或教程的幻灯片,可能涵盖了计算几何的基本概念、核心算法以及一些经典问题的解决方案。对于初学者,这是一个很好的起点,可以深入理解计算几何的...

    HD-ACM全套讲义

    5. **计算几何**:点线面的关系、凸包、最近点对等问题,常常在图形相关的题目中出现。 6. **位操作**:在某些优化算法中,位操作可以提高效率,如快速幂、位运算求异或等。 讲义中可能还会包含以下内容: 7. **...

    kuangbin的ACM模板

    平面最近点对(HDU1007) - **问题描述**:给定平面上的一组点,找到距离最近的两点。 - **算法思想**:通过分治法实现,将点集分为左右两部分,分别求出左右两侧的最近点对,然后再寻找跨越这两部分的最近点对。 -...

    kuangbin acm模板超级好用

    2.18.1 HDU4656 卷积取模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.19 其它公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.19.1 Polya . . . ....

    杭电ACM 课件

    常见问题包括直线与直线、圆的交点计算,多边形的面积、凸包问题等。掌握向量运算、极坐标的使用,以及了解平面几何的基本定理,对解决计算几何问题至关重要。 三、贪心算法 贪心算法是一种局部最优解策略,每次...

    HDOJ.rar_HD_HDOJ

    【标题】"HDOJ.rar_HD_HDOJ" 是一个与HDU(杭州电子科技大学)在线判题系统HDOJ相关的压缩包文件,其中包含了大量编程题目的源代码。 【描述】提到,这个压缩包包含了几百道HDOJ题目的源代码,这意味着它是一个宝贵...

    杭电ACM分类杭电ACM分类

    【杭电ACM分类】是针对杭州电子科技大学(HDU)在线判题系统(OJ)中的编程竞赛题目进行的一种整理和归类方式。这些竞赛题目通常涉及算法设计、数据结构、数学应用等多个方面,旨在提升参赛者的编程思维和解决实际...

Global site tag (gtag.js) - Google Analytics