JNU周练1026

CodeForces 340B

题意:给出n个点(无重点,无三点共线),选四个点组成平面四边形,求所能组成的四边形的最大面积。 (n<=300)

枚举四边形的对角线,再枚举每个点,左右各选最远的点组成两个三角形,形成一个最大四边形。

ExpandedBlockStart.gif
#include <iostream>
#include <iomanip>
#include <algorithm>
using  namespace std;

#define N 310

struct Point
{
     double x, y;
}p[N];

double xmult(Point p0, Point p1, Point p2)
{
     return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x-p0.x) * (p1.y - p0.y);
}

int main()
{
     int n;
     double ans =  0;
    cin >> n;
     for( int i= 0; i<n; i++)
        cin >> p[i].x >> p[i].y;

     for( int i= 0; i<n- 1; i++)
    {
         for( int j=i+ 1; j<n; j++)
        {
             double a1 =  0, a2 =  0;
             for( int k= 0; k<n; k++)
            {
                 double tmp = xmult(p[i],p[j],p[k]);
                 if(tmp> 0)
                    a1 = max(a1, tmp);
                 else
                    a2 = min(a2, tmp);
            }
            a2 = -a2;
             if(a1!= 0 && a2!= 0 && (a1+a2)/ 2>ans)
            {
                ans = (a1+a2)/ 2;
                 // cout << a1 / 2 << " " << a2 / 2 << endl;
            }
        }
    }
    cout << setprecision( 10) << ans << endl;
     return  0;
}
View Code 

 

 

 

转载于:https://www.cnblogs.com/byluoluo/p/3389596.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值