Friday, December 14, 2018

[UVa] 12197 - Trick or Treat

Author            : Dipu Kumar Mohanto 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : 12197 - Trick or Treat
Source            : UVa Online Judge
Category          : Search, Geometry
Algorithm         : Ternary Search
Verdict           : Accepted
  1. #include <bits/stdc++.h>  
  2.    
  3. using namespace std;  
  4.    
  5. static const int MAXN = 50000 + 5;  
  6.    
  7. struct Point  
  8. {  
  9.     double x, y;  
  10.     Point() {}  
  11.     Point(double x, double y)  
  12.     {  
  13.         this->x = x;  
  14.         this->y = y;  
  15.     }  
  16.     double dist(Point p)  
  17.     {  
  18.         return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));  
  19.     }  
  20. };  
  21.    
  22. Point point[MAXN];  
  23.    
  24. double f(Point p, int n)  
  25. {  
  26.     double maxi = -1e12;  
  27.     for (int i = 1; i <= n; i++)  
  28.     {  
  29.         double dis = point[i].dist(p);  
  30.         if (dis > maxi) maxi = dis;  
  31.     }  
  32.     return maxi;  
  33. }  
  34.    
  35. void ternary_search(int n)  
  36. {  
  37.     Point a, b, aa, bb;  
  38.     a =  {-200005, 0};  
  39.     b = {200005, 0};  
  40.     double mini = 1e12 + 6;  
  41.     for (int it = 0; it < 300; it++)  
  42.     {  
  43.         aa.x = a.x + (b.x - a.x) / 3.0;  
  44.         aa.y = 0;  
  45.         bb.x = b.x - (b.x - a.x) / 3.0;  
  46.         bb.y = 0;  
  47.         double mid1 = f(aa, n);  
  48.         double mid2 = f(bb, n);  
  49.         mini = min(mini, min(mid1, mid2));  
  50.         if (mid1 < mid2) b = bb;  
  51.         else a = aa;  
  52.     }  
  53.     cout << fixed << setprecision(5) << aa.x << " " << mini << endl;  
  54. }  
  55.    
  56. int main()  
  57. {  
  58.     int n;  
  59.     while (cin >> n, n)  
  60.     {  
  61.         for (int i = 1; i <= n; i++)  
  62.             cin >> point[i].x >> point[i].y;  
  63.         ternary_search(n);  
  64.     }  
  65. }  

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.