Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const long double EPS = 0.0000001;
- long double a, b;
- long double s(long double x, long double y) {
- long double tmp = sqrt(x*x + y*y);
- /*if (tmp - (a + b) >= -EPS || b - (a + tmp) >= -EPS || a - (b + tmp) >= -EPS)
- return -1;
- */
- if ((a + b) - tmp >= -EPS && (a + b) - tmp <= EPS)
- return 0.5 * x * y;
- else {
- long double s1 = 0.5 * x * y;
- long double p = (tmp + a + b) / 2.0;
- if ((p * (p - a) * (p - b) * (p - tmp)) < 0)
- cout << "\n" << p << " " << a << " " << b << " " << tmp << "\n";
- long double s2 = sqrt(p * (p - a) * (p - b) * (p - tmp));
- return s1 + s2;
- }
- }
- long double y(long double x) {
- //long double l = EPS, r = sqrt((a + b) * (a + b) - x * x);
- long double l = 0, r = sqrt((a + b)*(a + b) - x*x);
- //cout << l << " " << r << "\n";
- while (r - l > EPS) {
- long double m1 = l + (r - l) / 3,
- m2 = r - (r - l) / 3;
- if (s(x, m1) < s(x, m2))
- l = m1;
- else
- r = m2;
- }
- //cout << x << " " << l << " " << s(x, l) << "\n";
- return s(x, l);
- }
- int main()
- {
- freopen("1.txt", "r", stdin);
- freopen("2.txt", "w", stdout);
- cin >> a >> b;
- if (a > b)
- swap(a, b);
- long double l = 0, r = a + b;
- //cout << l << " " << r << "\n";
- while (r - l > EPS) {
- long double m1 = l + (r - l) / 3,
- m2 = r - (r - l) / 3;
- if (y(m1) < y(m2))
- l = m1;
- else
- r = m2;
- }
- cout << fixed;
- cout.precision(7);
- cout << y(l);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement