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;
}
相关推荐
DuHz20 小时前
论文精读:大语言模型 (Large Language Models, LLM) —— 一项调查
论文阅读·人工智能·深度学习·算法·机器学习·计算机视觉·语言模型
是烟花哈20 小时前
【前端】React框架学习
前端·学习·react.js
檀越剑指大厂20 小时前
32 万星的面试学习计划 + 内网穿透工具,程序员面试准备效率翻倍!
学习·面试·职场和发展
加农炮手Jinx20 小时前
LeetCode 72. Edit Distance 题解
算法·leetcode·力扣
借雨醉东风20 小时前
程序分享--常见算法/编程面试题:旋转矩阵
c++·线性代数·算法·面试·职场和发展·矩阵
_深海凉_21 小时前
LeetCode热题100-打家劫舍
算法·leetcode·职场和发展
Oll Correct21 小时前
实验二十一:验证OSPF可以划分区域
网络·笔记
jghhh0121 小时前
使用 MATLAB 实现支持向量回归 (SVR) 预测未来数据
算法·matlab
云泽8081 天前
笔试算法 - 双指针篇(二):四大经典求和题型 + 有效三角形计数问题
c++·算法
YangYang9YangYan1 天前
2026年工作后学习数据分析的价值与路径
学习·数据挖掘·数据分析