算法91----切绳子

不能一、题目:切绳子

有n根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对n根绳子进行任意裁剪(不能拼接),计算出这m根绳子最长的长度是多少。

输入:第一行2个正整数N,M,表示N根原始的绳子,和最终需要M根绳子数

第二行包含N 个整数,第i个整数Li表示第i根绳子的长度

其中,1≤N、M≤100000,0 <Li<1000000000

输出一个数字,表示裁剪后最长的长度,保留两位小数。

输入:

3 4

3 5 4

输出:

2.5

二、思路:

  在绳子长度中进行二分查找最长的长度,然后计算能切出来的绳子根数总和,如果能达到则返回结果。

三、代码

def cut(L,n,m):
    sumN = 0
    for i in range(n):
        sumN += L[i]
    if sumN < m:
        print(0)
        return False
    if n >= m:
        print(L[0])  #l为最大长度/m,u为所有长度和/m。
    l , u = max(L)/m , sumN(L)/m
    while round(l,3) < round(u,3):
        mid = (l + u ) / 2
        sumN = 0
        for i in range(n):
            sumN += L[i] // mid
        if sumN < m:
            u = mid
        else:
            l = mid
    print(round(l,2))
    return True
n , m = input().split()
n , m = int(n) , int(m)
L = list(map(int,input().split()))
cut(L,n,m)

原文地址:https://www.cnblogs.com/Lee-yl/p/10542404.html

时间: 2024-10-11 03:37:55

算法91----切绳子的相关文章

P1577 切绳子

P1577 切绳子 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li. 输出格式: 切割后每条绳子的最大长度. 输入输出样例 输入样例#1: 4 11 8.02 7.43 4.57 5.39 输出样例#1: 2.00需要高精处理,不能while(l<=r),用for枚举100次高精就够了 1 #include<cstdio

算法9-1:最大流和最小切割问题

最小切割问题 首先介绍什么是切割.切割就是将一张图中的顶点分成两部分A和B. 接下来介绍一下什么是容量.容量是A区到B区所有的边权重之和. 最小切割就是求一张图中使得容量最小的切割方式. 最小切割的应用 最小切割在国家的拆分时会用到.著名的苏联解体事件就是通过计算最小切割来实现国家的拆分.在建模的时候将城市作为图论中的顶点,将铁路作为顶点之间的边.最后通过计算最小切割来界定国家界线. 最大流问题 最大流就是从顶点s到顶点t,经过所有的边,网络所能支撑的最大流量.下图中顶点t从三个方向接收流量,它

luogu P1577 切绳子

题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li. 输出格式: 切割后每条绳子的最大长度. 输入输出样例 输入样例#1: 4 11 8.02 7.43 4.57 5.39 输出样例#1: 2.00二分答案+检验,卡精度,好恶心 #include<cstdio> #include<cmath> int k,n;

洛谷1577 1297切绳子(二分答案)

题目描述 Wonderland居民决定举行一届地区性程序设计大赛.仲裁委员会志愿负责这次赛事并且保证会组织一次有史以来最公正的比赛.为此,所有参赛者的电脑和网络中心会以星状网络连接,也就是说,对每个参赛者,组委会会用一根长度一定的网线将他的计算机与中心连接,使得他们到网络中心的距离相等. 为了买网线,组委会与当地的网络公司联系,要向他们购买一定数目的等长网线,这些网线要尽可能的长,使得组织者可以让选手们彼此远离. 于是公司指派管理网线事务的负责人解决此事.负责人清楚地知道仓库里每根网线的长度(精

洛谷—— P1577 切绳子

https://www.luogu.org/problemnew/show/P1577 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li. 输出格式: 切割后每条绳子的最大长度. 输入输出样例 输入样例#1: 复制 4 11 8.02 7.43 4.57 5.39 输出样例#1: 复制 2.00 说明 对于100%的数据 0

P1577 切绳子(二分)

思路:先来分析一下数据范围,是1e4个数据,但是,是double类型,结果不超过0.01那么在绳子最大的情况下,单纯的找正确答案暴力的话就是1e7的时间复杂度,再乘上1e4的数据,这样肯定不行.那么很容易想到二分,在找答案时使用二分的话就可以让时间复杂度下降到log(1e7)这是一个比较小的值,起码不超过128,这样,我们的时间复杂度就降了下来了. 检验函数,就是单纯的假设答案x,去除以每个绳子看看能得到最后有几段sum, 如果sum>=k则说明,是可行的.至于是不是最后答案,这要交给二分模板.

【17贪心算法】 剪绳子

这题和我之前做的https://www.cnblogs.com/Jun10ng/p/12363679.html 是同一个题目,但是现在多了一个条件 1<=n<=1000 如果还是用dp的话,dp数组就要用大数类BigInteger 但是,还有一种解法,贪心算法 题目 同上 思路 原本打算用大数类的dp数组 但是看了下贪心的解法,也很容易理解 就是一直乘3, 收获 大数类的使用 头文件是 java.math.BigInteger 初始化函数是BigInteger(String类的数字) 代码(贪

二分求解 切绳子 (浮点数易出现精度问题)

Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28644   Accepted: 6076 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to

基础算法总结

位运算 算术位运算 包括:按位与(&).按位或(|).按位异或(^).按位取反(~).按位左移(<<).按位右移(>>) 1 &(and) 对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的(同一位)都为1时才为1 举个例子: 1 1 1 1 1 0 0 0 1 1 1 0 =0 0 1 1 1 0 2 |(or) 比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1) 举个例子: 1