30| 木材加工

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1e5 + 10;
int n, k, max_len;
int a[N];

// 计算长度为mid时,能切出的段数
int check(int mid) {
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
        cnt += a[i] / mid;
    }
    return cnt;
}

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

    cin >> n >> k;
    max_len = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        max_len = max(max_len, a[i]);
    }

    // 特殊情况:如果连1cm都切不出k段,直接输出0
    if (check(1) < k) {
        cout << 0 << endl;
        return 0;
    }

    // 二分查找最大的l
    int l = 1, r = max_len;
    while (l < r) {
        // 注意:避免死循环
        int mid = (l + r + 1) >> 1;
        if (check(mid) >= k) {
            // 如果能切出至少k段,说明可以尝试更大的长度
            l = mid;
        } else {
            // 否则,必须减小长度
            r = mid - 1;
        }
    }
    // 循环结束时,l == r,就是最大的可行长度
    cout << l << endl;

    return 0;
}
相关推荐
zth4130211 分钟前
SegmentSplay‘s Super STL(v2.2)
开发语言·c++·算法
AI_零食3 分钟前
Flutter 框架跨平台鸿蒙开发 - 鸿蒙麻将游戏应用
学习·flutter·游戏·华为·交互·harmonyos
数据知道8 分钟前
claw-code 源码详细分析:Bootstrap Graph——启动阶段图式化之后,排障与扩展为什么会变简单?
前端·算法·ai·bootstrap·claude code·claw code
Kel11 分钟前
从Prompt到Response:大模型推理端到端核心链路深度拆解
人工智能·算法·架构
Felven11 分钟前
D. Matryoshkas
算法
17(无规则自律)24 分钟前
DFS连通域统计:岛屿数量问题及其变形
c++·算法·深度优先
自小吃多28 分钟前
TMC220X芯片 串口工具连接交互
笔记·嵌入式硬件
蒸蒸yyyyzwd34 分钟前
检索系统学习笔记
分布式·学习
笨笨饿41 分钟前
34_数据结构_栈
c语言·开发语言·数据结构·人工智能·嵌入式硬件·算法
ZhiqianXia44 分钟前
PyTorch学习笔记(6) : torch.autograd
pytorch·笔记·学习