テキトーなメモ帳

テキトーなメモ帳

AOJ:1091 KND is So Sexy

ADC及びBECの各辺の長さを誤差が大きくならない程度に全探索。
→各辺の長さを使ってヘロンの公式で面積を出す。

#define _USE_MATH_DEFINES
#define INF 0x3f3f3f3f
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <limits>
#include <map>
#include <string>
#include <cstring>
#include <set>
#include <deque>
#include <bitset>
#include <list>
#include <cctype>
#include <utility>
 
using namespace std;
 
typedef long long ll;
typedef pair <int,int> P;
typedef pair <int,P > PP;
 
int tx[] = {0,1,0,-1};
int ty[] = {-1,0,1,0};
 
static const double EPS = 1e-8;
 
 
int main(){
    double a,l,x;
     
    while(~scanf("%lf %lf %lf",&a,&l,&x)){
        double s = (a+l+l)/2.0;
        double ca = sqrt(s*(s-a)*(s-l)*(s-l));
 
        double res = 0.0;
         
        for(double scale = 0.00001; scale < 1.0; scale += 0.00001){
            double e1 = scale * (l+x);
            double e2 = (1.0-scale) * (l+x);
 
            double s2 = (e1+e2+l)/2.0;
            if(s2*(s2-e1)*(s2-e2)*(s2-l) < 0) continue;
 
            double ca2 = sqrt(s2*(s2-e1)*(s2-e2)*(s2-l));
 
            res=max(ca+ca2+ca2,res);
        }
 
        printf("%lf\n",res);
    }
}