zoukankan      html  css  js  c++  java
  • HDU 2202 最大三角形

    题解:先算出凸包,然后枚举凸包上的点计算即可

    #include <cstdio>
    #include <cmath>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    const int N = 50005;
    const double eps = 1e-8;
    struct point {int x,y;}p[N], stack[N];
    bool isZero(double x){return (x>0?x:-x)<eps;}
    double dis(point A, point B){return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));}
    int crossProd(point A, point B, point C){return (B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x);}
    int cmp(const void *a, const void *b){
        point*c=(point*)a;
        point*d=(point*)b;
        double k = crossProd(p[0], *c, *d);
        if (kdis(p[0], *d))) return 1;
        return -1;
    }
    int Graham(int n) {
        int x = p[0].x;
        int y = p[0].y;
        int mi = 0;
        for (int i=1; i<n; ++i) {
            if (p[i].x=2)--top;
            stack[++top]=p[i];
        }
        return top;    
    }
    double maxTrangle(int n) {
        int top=Graham(n);
        double area,maxArea = 0;
        for (int i=0;i<top;++i) {
            for (int j=i+1;j<top;++j) {
                for (int k=j+1;k<=top;++k) {
                    area=crossProd(stack[i],stack[j],stack[k]);
                    if (maxArea<area) maxArea=area; 
                }
            }
        }
        return maxArea*0.5;
    }
    int main() {
        int n;
        while (scanf("%d", &n) != EOF) {
            for (int i=0; i<n; ++i) scanf ("%d%d", &p[i].x, &p[i].y);
            double ans = maxTrangle(n);
            printf ("%.2lf
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    iOS UI基础05
    iOS UI基础04
    document.referrer
    节点
    特殊符号编码
    margin和padding的百分比
    XSS要点总结
    页面加载的过程
    函数声明和函数表达式
    jpg和png
  • 原文地址:https://www.cnblogs.com/forever97/p/3650061.html
Copyright © 2011-2022 走看看