1 条题解

  • 0
    @ 2026-2-4 15:36:41
    #include<bits/stdc++.h>
    using namespace std;
    
    // 题目给定的高精度π值
    const double PI = 3.141592653589793;
    // 浮点数极小值,避免除零/精度判断问题
    const double eps = 1e-8;
    
    int main() {
        // 加速输入输出,处理大数据用
        ios::sync_with_stdio(false);
        cin.tie(0);
    
        // [1] 输入测试用例数量
        int T;
        cin >> T;
        while (T--) {
            // [2] 输入饼的数量N、朋友数量F,总份数=朋友+自己
            int N, F;
            cin >> N >> F;
            int required = F + 1;
    
            // [3] 计算每个饼的体积(高=1,体积=π*r²),记录最大单饼体积
            vector<double> pies;
            double max_volume = 0.0;
            for (int i = 0; i < N; i++) {
                int r;
                cin >> r;
                double vol = PI * r * r;
                pies.push_back(vol);
                max_volume = max(max_volume, vol);
            }
    
            // [4] 初始化二分边界:最小体积0,最大体积为最大单饼体积
            double left = 0.0, right = max_volume, max_v = 0.0;
            // [5] 浮点数二分核心:固定迭代100次,保证精度远超过1e-4要求
            for (int iter = 0; iter < 100; iter++) {
                // 计算当前验证的每份体积mid
                double mid = (left + right) / 2;
                // 避免除零,直接跳过极小值
                if (mid < eps) break;
                // 记录当前mid下能切出的总块数(long long防止溢出)
                long long total = 0;
                for (double vol : pies) {
                    total += (long long)(vol / mid); // 显式向下取整,符合题意
                    if (total >= required) break; // 剪枝:满足需求提前终止
                }
    
                // [6] 判断当前mid是否可行:总块数≥需要的份数
                if (total >= required) {
                    max_v = mid; // 记录可行的最大体积
                    left = mid;  // 尝试更大的体积,调整左边界
                } else {
                    right = mid; // 体积过大不可行,调整右边界
                }
            }
    
            // [7] 输出结果:保留4位小数,用%.4lf匹配double类型
            printf("%.4lf\n", max_v);
            // 也可用C++ cout输出,效果一致
            // cout << fixed << setprecision(4) << max_v << endl;
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    1226
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    2
    已通过
    1
    上传者