HDU 4386(计算几何+婆罗摩笈多公式一般形式)

问题描述:

 One day the little Jack is playing a game with four crabsticks. The game is simple, he want to make all the four crabsticks to be a quadrilateral, which has the biggest area in all the possible ways. But Jack’s math is so bad, he doesn’t know how to do it, can you help him using your excellent programming skills? 

Input

 The first line contains an integer N (1 <= N <= 10000) which indicates the number of test cases. The next N lines contain 4 integers a, b, c, d, indicating the length of the crabsticks.(1 <= a, b, c, d <= 1000) 

Output

 For each test case, please output a line “Case X: Y”. X indicating the number of test cases, and Y indicating the area of the quadrilateral Jack want to make. Accurate to 6 digits after the decimal point. If there is no such quadrilateral, print “-1” instead. 

Sample Input

2
1 1 1 1
1 2 3 4
Sample Output

Case 1: 1.000000
Case 2: 4.898979

题目题意:题目给我们四条边长,问可不可以构成四边形,如果可以那么请输出最大的四边形的面积,不行输出-1。

题目分析:四边形存在的充要条件是最大的边长小于其他三边之和。如果存在四边形怎么求四边形的最大面积了。

现在给出四边形面积的一般性结论,对于任意四边形它的面积:


不难发现,我们要四边形的面积最大,即A等于90°,那么此时的四边形是一个圆内接四边形

代码如下:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cmath>
#include<algorithm>
using namespace std;

int a[4];
int main()
{
    int t,icase=1;
    scanf("%d",&t);
    while (t--) {
        scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
        sort (a,a+4);
        if (a[3]>=(a[1]+a[2]+a[0])) {
            printf("Case %d: -1\n",icase++);
            continue;
        }
        else {
            double s=(double)(a[0]+a[1]+a[2]+a[3])/2.0;
            double area=sqrt((s-a[0])*(s-a[1])*(s-a[2])*(s-a[3]));
            printf("Case %d: %.6f\n",icase++,area);
        }
    }
    return 0;
}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值