HICONT

huita

Oct 11th, 2025 (edited)
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <iomanip>
  6.  
  7. void CalculateCircumference(int point_min_count, std::vector<std::vector<int>> points,
  8.                             int point_array_size) {
  9.     float rad_H = 1100;
  10.     float rad_L = 0;
  11.     float mid;
  12.     bool covers = true;
  13.  
  14.     std::vector<std::vector<float>> events;
  15.  
  16.     float right;
  17.     float left;
  18.     int point_cover_count = 0;
  19.     int max_point_cover_count = 0;
  20.  
  21.     int events_size = 0;
  22.  
  23.     for (int iter = 0; iter < 40; ++iter) {
  24.         mid = rad_L + (rad_H - rad_L) / 2.0;
  25.  
  26.         for (int iter = 0; iter < point_array_size; ++iter) {
  27.             if (std::fabs(points[iter][1]) <= mid) {
  28.                 left = points[iter][0] - sqrt(pow(mid, 2) - pow(points[iter][1], 2));
  29.                 right = points[iter][0] + sqrt(pow(mid, 2) - pow(points[iter][1], 2));
  30.                 events.push_back({left, +1});
  31.                 events.push_back({right, -1});
  32.             }
  33.         }
  34.  
  35.         std::sort(events.begin(), events.end());
  36.         events_size = static_cast<int>(events.size());
  37.  
  38.         for (int iter = 0; iter < events_size; ++iter) {
  39.             point_cover_count += events[iter][1];
  40.             max_point_cover_count = std::max(max_point_cover_count, point_cover_count);
  41.         }
  42.  
  43.         if (max_point_cover_count >= point_min_count) {
  44.             covers = true;
  45.         } else {
  46.             covers = false;
  47.         }
  48.  
  49.         if (covers) {
  50.             rad_H = mid;
  51.         } else {
  52.             rad_L = mid;
  53.         }
  54.  
  55.         events.clear();
  56.         point_cover_count = 0;
  57.         max_point_cover_count = 0;
  58.     }
  59.  
  60.     std::cout << std::fixed << std::setprecision(6) << rad_H << "\n";
  61. }
  62.  
  63. int main() {
  64.     std::ios_base::sync_with_stdio(false);
  65.     std::cin.tie(nullptr);
  66.  
  67.     int point_array_size;
  68.     int point_min_count;
  69.  
  70.     std::cin >> point_array_size;
  71.     std::cin >> point_min_count;
  72.  
  73.     std::vector<std::vector<int>> points_input(point_array_size, std::vector<int>(2));
  74.  
  75.     for (int iter = 0; iter < point_array_size; ++iter) {
  76.         std::cin >> points_input[iter][0];
  77.         std::cin >> points_input[iter][1];
  78.     }
  79.  
  80.     CalculateCircumference(point_min_count, points_input, point_array_size);
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment