Решение задачи "Площадь треугольника" с Меньшиков

Без пояснения   Просмотров: 16


Даны длины трёх отрезков. Если возможно, требуется построить треугольник, в котором один из этих отрезков был бы высотой, один - биссектрисой и один - медианой; все построенные из одной вершины.

Ограничения: длина каждого из трёх отрезков от 0.01 до 100, точность результата должна быть 0.001.

Код

#include <iostream>
#include <cstdio>
#include <cmath>
 
using namespace std;
const double eps = 1e-6;
 
double h,m,b;
void input()
{
    cin>>h>>b>>m;
}
double getB(double x) {
    double d = sqrt(m*m - h*h);
    double l = sqrt(h*h + (d+x)*(d+x));
    double r = sqrt(h*h + (d-x)*(d-x));
    double bpx = d - x + (2*r*x) / (l+r);
    return sqrt(bpx*bpx + h*h);
}
void solve()
{
    if (h>b) swap(h,b);
    if (b>m) swap(b,m);
    if (h>b) swap(h,b);
    if (h == b && b == m)
        cout<<0;
    else if(h==b || b==m)
        cout<<-1;
    else {
        double l = 0, r = 2e9;
        while (l + eps < r) {
            double m = (l + r) / 2;
            if (getB(m) > b)
                l = m;
            else
                r = m;
        }
        printf("%0.5f",l*h);       
    }
}
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
 
    input();
    solve();
    return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться