hihocoder1245 王胖浩与三角形

来源:互联网 发布:vscode搭建rails 编辑:程序博客网 时间:2024/06/13 06:24

#1245 : 王胖浩与三角形

时间限制:1000ms
单点时限:1000ms
内存限制:256MB

描述

王胖浩有一个三角形,三边长为a,b,c。他有特殊的能力,能增加三条边的边长,增加的总长度不能超过l。

他想通过合理地使用他的特殊能力,使得三角形的面积最大。

输入

第一行一个整数T,表示测试数据个数。

以下T行,每行一个四个整数a,b,c,l。

数据范围:

1<=T<=104, 1<=a,b,c<=106, 0<=l<=106

输出

输出T行,每行一个实数,表示三角形的面积。要求相对误差不能超过10-9

样例输入
12 3 3 3
样例输出
5.8216152143

三角形周长一定,边长越接近面积越大。

代码:

#include <iostream>#include <cmath>#include <algorithm>#include <iomanip>using namespace std;int T;double area(double a,double b,double c){    double p = 0.5*(a+b+c);    return sqrt(p*(p-a)*(p-b)*(p-c));}int main(){    cin >> T;    double a[T][3],l[T];    for(int i=0; i<T; i++){        cin >> a[i][0] >> a[i][1] >> a[i][2] >> l[i];    }    for(int i=0; i<T; i++){        sort(a[i],a[i]+3);        if(a[i][1]-a[i][0]<=l[i]){            l[i] -= a[i][1]-a[i][0];            a[i][0] = a[i][1];            if(a[i][2]-a[i][1]<=l[i]/2){                l[i] -= 2*(a[i][2]-a[i][1]);                a[i][0] = a[i][2]+l[i]/3;                a[i][1] = a[i][2]+l[i]/3;                a[i][2] = a[i][2]+l[i]/3;            }            else{                a[i][0] += l[i]/2;                a[i][1] += l[i]/2;            }        }        else a[i][0] += l[i];        cout << fixed << setprecision(10) << area(a[i][0],a[i][1],a[i][2])<<endl;    }    return 0;}

0 0
原创粉丝点击