Advertisement
tepyotin2

Antenna

Jul 3rd, 2025
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const long double PI = 4 * atan(1);
  6.  
  7. int n, k;
  8. pair<long double, long double> points[500], centered, ans;
  9.  
  10. bool check(long double r) {
  11.     for (int i = 0; i < n; i++) {
  12.         vector<pair<long double, int>> events;
  13.  
  14.         for (int j = 0; j < n; j++) if (j != i) {
  15.             long double dist = hypot(points[j].second - points[i].second, points[j].first - points[i].first);
  16.             if (dist > 2 * r) continue;
  17.             long double a = atan2(points[j].second - points[i].second, points[j].first - points[i].first);
  18.             long double b = acos(dist / (2 * r));
  19.             events.push_back({a - b, 1});
  20.             events.push_back({a + b, -1});
  21.             events.push_back({a - b + 2 * PI, 1});
  22.             events.push_back({a + b + 2 * PI, -1});
  23.         }
  24.  
  25.         sort(events.begin(), events.end());
  26.  
  27.         int cnt = 1;
  28.         for (pair<long double, int> j : events) {
  29.             cnt += j.second;
  30.             if (cnt >= k) return centered = {points[i].first + r * cos(j.first), points[i].second + r * sin(j.first)}, true;
  31.         }
  32.     }
  33.     return false;
  34. }
  35.  
  36. int main() {
  37.     ios_base::sync_with_stdio(0), cin.tie(0);
  38.  
  39.     cin >> n >> k;
  40.     for (int i = 0; i < n; i++) {
  41.         cin >> points[i].first >> points[i].second;
  42.     }
  43.  
  44.     long double l = 0, r = 7500;
  45.  
  46.     while (abs(r - l) > 1e-5) {
  47.         long double mid = (l + r) / 2;
  48.         if (check(mid)) r = mid;
  49.         else l = mid;
  50.     }
  51.  
  52.     cout << fixed << setprecision(5) << l << '\n' << centered.first << ' ' << centered.second;
  53.  
  54.     return 0;
  55. }
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement