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;
}
相关推荐
YSL07012430 分钟前
一文通关-----排序
数据结构·算法
FlightYe10 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
ZhengEnCi11 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考11 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
by2099911 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
视觉小萌新12 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
Rover Ramble12 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
你怎么知道我是队长12 小时前
C++零基础入门第2周:数据类型、运算符与表达式完全指南(附20段可运行代码+避坑清单)
c++
say_fall13 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
雪落漂泊13 小时前
C++算法 滑动窗口篇(下)
开发语言·c++