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;
}
相关推荐
cuso4win7 小时前
Feed 流面试笔记
笔记·面试·职场和发展
毕竟是shy哥7 小时前
基于提示引导适配器的实体级对齐遥感图文检索
人工智能·学习·bert·transformer
happyness447 小时前
向AI学习,而不是把任务扔给AI
人工智能·学习
hai3152475438 小时前
FlashAttention C语言(C++)实现(展示版)
c语言·开发语言·c++·人工智能·算法
林爷万福8 小时前
光谱数据预处理:基线校正、平滑去噪实战
人工智能·算法
8Qi88 小时前
LeetCode 1049:最后一块石头的重量 II —— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
世人万千丶8 小时前
鸿蒙PC问题解决:窗口拖动与拉伸时页面布局瞬间错乱、回弹后恢复
学习·华为·开源·harmonyos·鸿蒙·鸿蒙系统
zyl837218 小时前
Python NumPy 学习
python·学习·numpy
wuminyu8 小时前
Java锁机制之Java对象重量级锁源码剖析
java·linux·c语言·jvm·c++
wubba lubba dub dub7508 小时前
第四十九周学习周报
人工智能·算法·机器学习