Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <string>
- #include <algorithm>
- #include <string>
- #include <deque>
- #include <iomanip>
- #define F first
- #define S second
- using namespace std;
- const long double eps = 0.000001;
- const long double pi = 3.1415926535897932;
- struct point
- {
- long double x;
- long double y;
- point() {}
- point(long double x, long double y) : x(x), y(y) {}
- };
- vector <point> a;
- point t1, t2, t3;
- point operator+(point a, point b)
- {
- return point(a.x + b.x, a.y + b.y);
- }
- point operator-(point a, point b)
- {
- return point(a.x - b.x, a.y - b.y);
- }
- point operator*(point a, long double k)
- {
- return point(a.x * k, a.y * k);
- }
- point operator/(point a, long double k)
- {
- return point(a.x / k, a.y / k);
- }
- long double scal(point a, point b)
- {
- return a.x * b.x + a.y * b.y;
- }
- long double vect(point a, point b)
- {
- return a.x * b.y - a.y * b.x;
- }
- long double dist(point a, point b)
- {
- return sqrt(scal(a - b, a - b));
- }
- long double f(long double x, long double y)
- {
- long double ans = dist(point(x, y), t1);
- ans += dist(point(x, y), t2);
- ans += dist(point(x, y), t3);
- return ans;
- }
- long double ftern(long double x)
- {
- long double l = -10000.0;
- long double r = 10000.0;
- long double m1, m2;
- int wtf = 300;
- while (wtf--)
- {
- m1 = l + (r - l) / 3.0;
- m2 = r - (r - l) / 3.0;
- if (f(x, m1) > f(x, m2))
- l = m1;
- else
- r = m2;
- }
- return l;
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- // freopen("input.txt", "r", stdin);
- // freopen("output.txt", "w", stdout);
- long double x1, y1, x2, y2, x3, y3;
- cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
- t1 = point(x1, y1);
- t2 = point(x2, y2);
- t3 = point(x3, y3);
- long double l = -10000.0, r = 10000.0;
- long double m1, m2;
- int wtf = 300;
- while (wtf--)
- {
- m1 = l + (r - l) / 3.0;
- m2 = r - (r - l) / 3.0;
- long double m1d = f(m1, ftern(m1)), m2d =f(m2, ftern(m2));
- if (m1d > m2d)
- l = m1;
- else
- r = m2;
- }
- cout <<setprecision(15) << l << " " << ftern(l) << endl;
- //cout << 2 << " " << ftern(2) << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment