2 条题解

  • 0
    @ 2025-10-8 16:51:36
    #include <bits/stdc++.h> 
    using namespace std;
    const int N = 210000;
    const double eps = 1e-6; 
    int n, m;
    double a[N];
    
    bool check(double x) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += int(a[i] / x);
        }
        return sum >= m + 1;
    }
    
    int main() {
        scanf("%d%d", &n, &m);
        double l = 0, r = 0, ans;
        for (int i = 1; i <= n; i++) {
            scanf("%lf", &a[i]);
            a[i] = a[i] * a[i] * 3.141592653589;
            r = max(r, a[i]);
        }
        while (l <= r) {
            double mid = (l + r) / 2;
            if (check(mid)) {
                l = mid + eps;
                ans = mid;
            } else {
                r = mid - eps;
            }
        }
        printf("%.3lf\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:51:26
      #include<bits/stdc++.h> 
      using namespace std;
      const int N=210000;
      const double eps=1e-6; 
      int n,m;double a[N];
      bool check(double x)
      {
          int sum=0;for(int i=1;i<=n;i++)sum+=int(a[i]/x);
          if(sum>=m+1)return 1;else return 0;
      }
      int main()
      {
          scanf("%d%d",&n,&m);
          double l=0,r=0,ans;
          for(int i=1;i<=n;i++)
          {
              scanf("%lf",&a[i]); a[i]=a[i]*a[i]*3.141592653589;
              r=max(r,a[i]);
          }
          while(l<=r)
          {
              double mid=(l+r)/2;
              if(check(mid)) l=mid+eps,ans=mid;
              else           r=mid-eps;
          }
          printf("%.3lf\n",ans);
          return 0;
      }
      • 1

      信息

      ID
      281
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      244
      已通过
      70
      上传者