算法练手题目:Cable master

题目是英文,我就不放原题了,简单几句概括:

现在需要准备很多等长的网线小段。

现在从供应商那里买了一堆网线:

每根网线长度不同

可以按 1 厘米精度切割

但不能拼接(只能切)

从这些线里切出 K 段完全相同长度的网线,并且希望这些小段尽可能长

输入

第一行:

N K

N:有多少根电缆(1 ≤ N ≤ 10000)

K:需要切出的段数(1 ≤ K ≤ 10000)

接下来 N 行:

每行一个电缆长度(单位:米)

精确到小数点后两位(厘米级精度)

范围:1 m ~ 100000 m

输出

可以切出的 最大等长网线长度(米)

要求:精确到小数点后两位;如果连 1 cm 都切不出 K 段则为0.00

这是最大最小二分,小数二分,求最大值的话右缩

板子的话看老师ppt

下面是我根据板子写的一次

cpp 复制代码
bool judge(double x) {
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        cnt += (int)(a[i] / x);
    }
    return cnt >= K;
}

double solve() {
    double l = 0, r = maxLen; // 最大绳子长度
    const double eps = 1e-7;

    while (r - l > eps) {
        double mid = (l + r) / 2;

        if (judge(mid)) {
            l = mid;   // 可以切够 → 尝试更长
        } else {
            r = mid;   // 不够 → 缩短
        }
    }
    return l;
}

这是最核心的两个方法,下面是完整的

cpp 复制代码
#include <iostream>
#include <iomanip>
using namespace std;

const int MAXN = 10010;

int n, k;
int len[MAXN]; // 单位:cm

bool judge(int x) {
    if (x == 0) return true;

    int cnt = 0;
    for (int i = 0; i < n; i++) {
        cnt += len[i] / x;
    }
    return cnt >= k;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> k;

    int maxLen = 0;

    for (int i = 0; i < n; i++) {
        double x;
        cin >> x;
        len[i] = (int)(x * 100 + 0.5); // 转 cm
        if (len[i] > maxLen) maxLen = len[i];
    }

    int l = 1, r = maxLen;
    int ans = 0;

    while (l <= r) {
        int mid = (l + r) / 2;

        if (judge(mid)) {
            ans = mid;
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }

    if (ans == 0) {
        cout << "0.00\n";
    } else {
        cout << fixed << setprecision(2) << ans / 100.0 << "\n";
    }

    return 0;
}
相关推荐
小七在进步12 分钟前
类和对象(五)
java·开发语言·算法
就叫年华吧丶21 分钟前
长文档点目录定位总是不准?一个 content-visibility + 平滑滚动引发的连环坑(Vue3 实战)
前端·javascript·算法·vue
FPGA信号处理28 分钟前
【信号检测与估计】第四节课:非高斯噪声下的 BLUE、极大似然与 EM 算法
人工智能·算法·机器学习
.道阻且长.1 小时前
C++ 11:可变参数模板
前端·c++·算法
Doubbbbbbble云3 小时前
基于贪心算法的区间覆盖问题求解策略4
算法·贪心算法
不会就选b9 小时前
算法日常・每日刷题--<贪心>25
数据结构·算法
千里码aicood13 小时前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
做cv的小昊13 小时前
【World Model】π0.5:a Vision-Language-Action Model with Open-World Generalization
人工智能·算法·机器学习·大模型·多模态·vla·世界模型
لا معنى له14 小时前
World-In-World: World Models in a Closed-Loop World
算法