题解 SP2716 【QUADAREA - Maximal Quadrilateral Area】

· · 题解

题意与HDU4386差不多,就是给定四边形四条边,求这样的四边形面积最大是多少。

显然可以证明面积S=\sqrt{(p-a)(p-b)(p-c)(p-d)},其中p=\frac{a+b+c+d}{2}

具体证明过程可以见下图(来源:上海中学数学2010年第三期45页,作者徐峰):

有了公式,代码也就很简单了:

#include<bits/stdc++.h>
using namespace std;
namespace FAST_IO
{
    template<typename T> void read(T &a)
    {
        a=0;
        int f=1;
        char c=getchar();
        while(!isdigit(c))
        {
            if(c=='-')
            {
                f=-1;
            }
            c=getchar();
        }
        while(isdigit(c))
        {
            a=a*10+c-'0';
            c=getchar();
        }
        a=a*f;
    }
    template <typename T> void write(T a)
    {
        if(a<0)
        {
            a=-a;
            putchar('-');
        }
        if(a>9)
        {
            write(a/10);
        }
        putchar(a%10+'0');
    }
    template <typename T> void writeln(T a)
    {
        write(a);
        puts("");
    }
}
int main()
{
    int t;//多组数据
    double a,b,c,d;
    cin>>t;
    while(t--)
    {
        cin>>a>>b>>c>>d;
        double p=(a+b+c+d)/2;
        printf("%.2lf\n", sqrt((p-a)*(p-b)*(p-c)*(p-d)));
    }
}