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.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		List<Double> ansList = new ArrayList<Double>();
		Scanner sc = new Scanner(System.in);
		while(true){
		if(sc.hasNext()==false) {
			break;
		}

		double a = sc.nextInt();
		double l = sc.nextInt();
		double x = sc.nextInt();

		ansList.add(Math.sqrt(l*l-a*a*0.25)*a*0.5+l*Math.sqrt((l+x)*(l+x)*0.25-l*l*0.25));
		}
		for(int i=0;i<ansList.size();i++) {
		System.out.println(ansList.get(i));
		}
		sc.close();
		}


}