Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const long double EPS = 0.0000001;
  6.  
  7. long double a, b;
  8.  
  9. long double s(long double x, long double y) {
  10.     long double tmp = sqrt(x*x + y*y);
  11.     /*if (tmp - (a + b) >= -EPS || b - (a + tmp) >= -EPS || a - (b + tmp) >= -EPS)
  12.         return -1;
  13.     */
  14.     if ((a + b) - tmp >= -EPS && (a + b) - tmp <= EPS)
  15.         return 0.5 * x * y;
  16.     else {
  17.         long double s1 = 0.5 * x * y;
  18.         long double p = (tmp + a + b) / 2.0;
  19.         if ((p * (p - a) * (p - b) * (p - tmp)) < 0)
  20.             cout << "\n" << p << " " << a << " " << b << " " << tmp << "\n";
  21.         long double s2 = sqrt(p * (p - a) * (p - b) * (p - tmp));
  22.         return s1 + s2;
  23.     }
  24. }
  25.  
  26. long double y(long double x) {
  27.     //long double l = EPS, r = sqrt((a + b) * (a + b) - x * x);
  28.     long double l = 0, r = sqrt((a + b)*(a + b) - x*x);
  29.     //cout << l << " " << r << "\n";
  30.     while (r - l > EPS) {
  31.         long double m1 = l + (r - l) / 3,
  32.         m2 = r - (r - l) / 3;
  33.         if (s(x, m1) < s(x, m2))
  34.             l = m1;
  35.         else
  36.             r = m2;
  37.     }
  38.     //cout << x << " " << l << " " << s(x, l) << "\n";
  39.     return s(x, l);
  40. }
  41.  
  42. int main()
  43. {
  44.     freopen("1.txt", "r", stdin);
  45.     freopen("2.txt", "w", stdout);
  46.     cin >> a >> b;
  47.  
  48.     if (a > b)
  49.         swap(a, b);
  50.  
  51.     long double l = 0, r = a + b;
  52.     //cout << l << " " << r << "\n";
  53.     while (r - l > EPS) {
  54.         long double m1 = l + (r - l) / 3,
  55.         m2 = r - (r - l) / 3;
  56.         if (y(m1) < y(m2))
  57.             l = m1;
  58.         else
  59.             r = m2;
  60.     }
  61.     cout << fixed;
  62.     cout.precision(7);
  63.     cout << y(l);
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement