Problem:
KND is So Sexy

Problem

KND君は会津大学に在籍する学生プログラマである。彼の胸元はとてもセクシーなことで知られている。

簡単のために胸元から見える肌の部分を図にある二等辺三角形ABCで表す。しかし服にはたるみが生じているため、長さが等しい2辺AC,BC(これらの長さをlとする)には実際にはさらに長さx分余裕がある。はだける部分の面積を増やすため、たるんだ分を引っ張ることで新たにふたつの三角形ADC,BECを作ることにしよう。点D,Eは三角形ABCの外側に存在する。この新しいふたつの三角形はたるみによって生じるもので、辺BEと辺ECの長さの和および辺ADと辺DCの長さの和はl+xでなければならない。あなたはこれら3つの三角形の面積の和Mが最大になるように点D,Eを決める。KND君の隣人であるあなたは彼の胸元がどれ程セクシーなのかを調べるために、a,l,xを入力として服からのぞく肌の最大の面積(M)を計算するプログラムを作成することにした。

Input

入力は複数のテストケースからなる。
ひとつのテストケースは以下の形式で与えられる。
入力の終わりをEOFで示す。

a l x

ここで、

a:三角形ABCの辺ABの長さ

l:三角形ABCの2辺AC,BCの長さ

x:2辺AC,BCにあるたるみ

である。

Constraints

入力は以下の条件を満たす。

入力はすべて整数。

1 ≤ a ≤ 1000

1 ≤ l ≤ 1000

1 ≤ x ≤ 1000

Output

各テストケースにつき最大の面積を1行に出力せよ。この値はジャッジ出力の値と10-5より大きい差を持ってはならない。

Sample Input

2 2 1
2 3 1
3 2 3
2 3 5

Sample Output

3.9681187851
6.7970540913
6.5668891783
13.9527248554

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            double a = scan.nextDouble();
            double l = scan.nextDouble();
            double x = scan.nextDouble();
            System.out.printf("%.9f\n",Helon(a,l,l) + 2*Helon(l,(l+x)/2.0,(l+x)/2.0));
        }
    }
    
    public static double Helon(double a,double b,double c){
    	double m = 0;
    	double s = (a+b+c)/2.0;
    	m = Math.sqrt(s*(s-a)*(s-b)*(s-c));
    	return m;
    }
}