hihoCoder挑战赛16 王胖浩与三角形

题目1 : 王胖浩与三角形
时间限制: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。

样例输入
1
2 3 3 3
样例输出
5.8216152143

海伦公式,以及智商的分类讨论

#include<iostream>
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<algorithm> 
#include<math.h> 
using namespace std;    
bool cmp(double a,double b)
{  
    return a<b;  
}  
int main()  
{  
    int t,i,j,k;  
    double l,p; 
    double num[3]; 
    scanf("%d",&t);  
    while(t--)
    {  
        scanf("%lf%lf%lf%lf",&num[0],&num[1],&num[2],&l);  
        sort(num,num+3,cmp);  
        if(num[1]-num[0]>=l)
        {  
            num[0]+=l;  
        }  
        else if(num[2]-num[1]+num[2]-num[0]>=l)
        {  
            num[0]=num[1]=(num[0]+num[1]+l)/2.0;  
        }  
        else 
        {  
            num[0]=num[1]=num[2]= (num[0]+num[1]+num[2]+l)/3.0;  
        }  
        p=(num[0]+num[1]+num[2])/2.0;  
        printf("%.11f\n",sqrt(p*(p-num[0])*(p-num[1])*(p-num[2])));  
    }  
    return 0;  
}  

你可能感兴趣的:(hihoCoder挑战赛16 王胖浩与三角形)