double_trouble

point Ferma

Mar 24th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cmath>
  5. #include <string>
  6. #include <algorithm>
  7. #include <string>
  8. #include <deque>
  9. #include <iomanip>
  10.  
  11. #define F first
  12. #define S second
  13.  
  14. using namespace std;
  15.  
  16. const long double eps = 0.000001;
  17. const long double pi = 3.1415926535897932;
  18.  
  19.  
  20. struct point
  21. {
  22.     long double x;
  23.     long double y;
  24.     point() {}
  25.     point(long double x, long double y) : x(x), y(y) {}
  26. };
  27.  
  28. vector <point> a;
  29. point t1, t2, t3;
  30.  
  31. point operator+(point a, point b)
  32. {
  33.     return point(a.x + b.x, a.y + b.y);
  34. }
  35.  
  36. point operator-(point a, point b)
  37. {
  38.     return point(a.x - b.x, a.y - b.y);
  39. }
  40.  
  41. point operator*(point a, long double k)
  42. {
  43.     return point(a.x * k, a.y * k);
  44. }
  45.  
  46. point operator/(point a, long double k)
  47. {
  48.     return point(a.x / k, a.y / k);
  49. }
  50.  
  51. long double scal(point a, point b)
  52. {
  53.     return a.x * b.x + a.y * b.y;
  54. }
  55.  
  56. long double vect(point a, point b)
  57. {
  58.     return a.x * b.y - a.y * b.x;
  59. }
  60.  
  61. long double dist(point a, point b)
  62. {
  63.     return sqrt(scal(a - b, a - b));
  64. }
  65.  
  66. long double f(long double x, long double y)
  67. {
  68.     long double ans = dist(point(x, y), t1);
  69.     ans += dist(point(x, y), t2);
  70.     ans += dist(point(x, y), t3);
  71.     return ans;
  72. }
  73.  
  74. long double ftern(long double x)
  75. {
  76.     long double l = -10000.0;
  77.     long double r = 10000.0;
  78.     long double m1, m2;
  79.     int wtf = 300;
  80.     while (wtf--)
  81.     {
  82.         m1 = l + (r - l) / 3.0;
  83.         m2 = r - (r - l) / 3.0;
  84.         if (f(x, m1) > f(x, m2))
  85.             l = m1;
  86.         else
  87.             r = m2;
  88.     }
  89.     return l;
  90. }
  91.  
  92. int main()
  93. {
  94.     ios_base::sync_with_stdio(0);
  95.     //      freopen("input.txt", "r", stdin);
  96.     //      freopen("output.txt", "w", stdout);
  97.  
  98.     long double x1, y1, x2, y2, x3, y3;
  99.     cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
  100.     t1 = point(x1, y1);
  101.     t2 = point(x2, y2);
  102.     t3 = point(x3, y3);
  103.  
  104.     long double l = -10000.0, r = 10000.0;
  105.     long double m1, m2;
  106.     int wtf = 300;
  107.     while (wtf--)
  108.     {
  109.         m1 = l + (r - l) / 3.0;
  110.         m2 = r - (r - l) / 3.0;
  111.         long double m1d = f(m1, ftern(m1)), m2d =f(m2, ftern(m2));
  112.         if (m1d > m2d)
  113.             l = m1;
  114.         else
  115.             r = m2;
  116.     }
  117.  
  118.     cout <<setprecision(15) << l << " " << ftern(l) << endl;
  119.  
  120.     //cout << 2 << " " << ftern(2) << endl;
  121.     return 0;
  122. }
Add Comment
Please, Sign In to add comment