PTA:切割绳子

题干

有N条绳子,它们的长度分别为L

i

,i=1,⋯,N。如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长?

输入格式:

第一行两个整数n和k(1<n<10000;1<k<10000)。

接下来n行,描述了每条绳子的长度L

i

,L

i

也是整数。

输出格式:

切割后每条绳子的最大长度。

输入样例:

4 11

802

743

457

539

输出样例:

200

解答过程

c 复制代码
#include <stdio.h>
int canCut(int ropes[], int n, int k, int length) {
    int count = 0;
    for (int i = 0; i < n; ++i) {
        count += ropes[i] / length;
    }
    return count >= k;
}
int maxCutLength(int ropes[], int n, int k) {
    int left = 1, right = 0;
    for (int i = 0; i < n; ++i) {
        if (ropes[i] > right) {
            right = ropes[i];
        }
    }
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (canCut(ropes, n, k, mid)) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return right;
}
int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    int ropes[n];
    for (int i = 0; i < n; ++i) {
        scanf("%d", &ropes[i]);
    }
    int maxLength = maxCutLength(ropes, n, k);
    printf("%d\n", maxLength);
    return 0;
}
相关推荐
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
linux_carlos1 小时前
环形缓冲区
数据结构
readmancynn1 小时前
二分基本实现
数据结构·算法
萝卜兽编程1 小时前
优先级队列
c++·算法
Bucai_不才1 小时前
【数据结构】树——链式存储二叉树的基础
数据结构·二叉树
盼海1 小时前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步1 小时前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
Rstln2 小时前
【DP】个人练习-Leetcode-2019. The Score of Students Solving Math Expression
算法·leetcode·职场和发展
芜湖_2 小时前
【山大909算法题】2014-T1
算法·c·单链表
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode