v 0. Pasted by slipstak2 as cpp at 2011-01-17 21:13:56 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 15.
  2. // 15B. Площадь треугольника [tria-abm]
  3. // ibelyaev: 14Jan2011
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <cmath>
  8.  
  9. using namespace std;
  10. const double eps = 1e-6;
  11.  
  12. double h,m,b;
  13. void input()
  14. {
  15.     cin>>h>>b>>m;
  16. }
  17. double getB(double x) {
  18.     double d = sqrt(m*m - h*h);
  19.     double l = sqrt(h*h + (d+x)*(d+x));
  20.     double r = sqrt(h*h + (d-x)*(d-x));
  21.     double bpx = d - x + (2*r*x) / (l+r);
  22.     return sqrt(bpx*bpx + h*h);
  23. }
  24. void solve()
  25. {
  26.     if (h>b) swap(h,b);
  27.     if (b>m) swap(b,m);
  28.     if (h>b) swap(h,b);
  29.     if (h == b && b == m)
  30.         cout<<0;
  31.     else if(h==b || b==m)
  32.         cout<<-1;
  33.     else {
  34.         double l = 0, r = 2e9;
  35.         while (l + eps < r) {
  36.             double m = (l + r) / 2;
  37.             if (getB(m) > b)
  38.                 l = m;
  39.             else
  40.                 r = m;
  41.         }
  42.         printf("%0.5f",l*h);       
  43.     }
  44. }
  45. int main()
  46. {
  47.     freopen("input.txt","r",stdin);
  48.     freopen("output.txt","w",stdout);
  49.  
  50.     input();
  51.     solve();
  52.     return 0;
  53. }


Editing is locked.