zoukankan      html  css  js  c++  java
  • Codeforces Round #198 (Div. 2) B. Maximal Area Quadrilateral

    B. Maximal Area Quadrilateral
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Iahub has drawn a set of n points in the cartesian plane which he calls "special points". A quadrilateral is a simple polygon without self-intersections with four sides (also called edges) and four vertices (also called corners). Please note that a quadrilateral doesn't have to be convex. A special quadrilateral is one which has all four vertices in the set of special points. Given the set of special points, please calculate the maximal area of a special quadrilateral.

    Input

    The first line contains integer n (4 ≤ n ≤ 300). Each of the next n lines contains two integers: xiyi ( - 1000 ≤ xi, yi ≤ 1000) — the cartesian coordinates of ith special point. It is guaranteed that no three points are on the same line. It is guaranteed that no two points coincide.

    Output

    Output a single real number — the maximal area of a special quadrilateral. The answer will be considered correct if its absolute or relative error does't exceed 10 - 9.

    Sample test(s)
    input
    5
    0 0
    0 4
    4 0
    4 4
    2 3
    
    output
    16.000000
    Note

    In the test example we can choose first 4 points to be the vertices of the quadrilateral. They form a square by side 4, so the area is 4·4 = 16.

    题 意就是找4个点,求最大的四边形的面积,枚举对角线,我们可以求出上三角形的最大值,和下三角形的最大值,这样,我们就可以得出最大的四边形的面积,用叉积可以得出面积,还可以通过其正负,得出是上三角形,还是下三角形,这样,就可以得到了n^3的算法了!

     

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    #define M 350
    #define eps 0
    #define inf 10000000000
    struct node {
        double x,y;
    }p[M];
    double mul(int i,int j,int k){
        return ((p[k].x-p[i].x)*(p[k].y-p[j].y)-(p[k].y-p[i].y)*(p[k].x-p[j].x))/2.0;
    }
    int main()
    {
        int n,i,j,k;
        while(scanf("%d",&n)!=EOF){
            for(i=0;i<n;i++){
                scanf("%lf%lf",&p[i].x,&p[i].y);
            }
            double lmax=-inf,rmax=-inf,amax=-inf;
            for(i=0;i<n;i++){
                for(j=0;j<n;j++){
                    if(i==j)
                    continue;
                    lmax=-inf,rmax=-inf;
                    for(k=0;k<n;k++){
                        if(i==k||j==k)
                        continue;
                        double temp=mul(i,j,k);
                        if(temp<eps){
                            lmax=max(lmax,-temp);
                        }
                        else {
                            rmax=max(rmax,temp);
                        }
                    }
                    amax=max(amax,lmax+rmax);
                   // printf("%.6f %.6ffdsf
    ",amax,lmax+rmax);
                }
            }
            printf("%.6f
    ",amax);
        }
        return 0;
    }
    


  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/riskyer/p/3317910.html
Copyright © 2011-2022 走看看