当前位置:首页 > 题解目录 > 正文内容

【题解】切割绳子

亿万年的星光4年前 (2022-03-19)题解目录3642

【题目描述】

有N条绳子,它们的长度分别为Li。如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2位后的小数)。

【输入描述】

第一行两个整数N和K(0<N<=10000, 0<K<=10000),接下来N行,描述了每条绳子的长度Li(0<Li<=100000.00)。

【输出描述】

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

【样例输入】

4 11
8.02
7.43
4.57
5.39

【样例输出】

2.00

【题目分析】

  先确定初始区间[left,right],显然left=0,right可取单段绳子的最大值,然后使用二分法得到mid,测试mid是大于要求的值还是小于要求的值。如果mid值可以切出k段绳子,则增大下界,使left=mid;如果mid值切不出k段绳子,则mid取大了,减小上界,使right=mid;.然后最终使left 与right无限逼近答案。注意:程序中可以使用 while ((right-left)>1e-4)作为循环控制条件。


【参考代码】

#include <bits/stdc++.h>
double a[10001];
int n,k;
int judge(double x)
{

         int num = 0,i;
         for (i = 0; i < n; i++)
                   num += (int)(a[i] / x);
         return num;
}
int main()
{
    int i;
    double left,right,mid,max=0;
	scanf("%d%d",&n,&k);
    for(i=0;i<n;i++)
    {
            scanf("%lf",&a[i]);
            if (max<a[i]) 
				max=a[i];
    }
    left=0, right=max;
    while ((right-left)>1e-4)
    {
        mid=(left+right)/2;
        if(judge(mid)>=k) 
            left=mid;
        else 
            right=mid;
    }
    printf("%.2f\n",floor(right*100)/100);
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【NOIP2000】计算器的改良

    【题目描述】NCL 是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手 ZL...

    回文质数

    【题目描述】如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。【输入描述】无【输出描述】所有的既是回文数又是素数的三位数。一个数...

    进制转换(1)

    【题目描述】毛毛是个健忘的孩子,编程课上老师刚讲过进制转换的问题,她又忘了。请你帮他编写一个程序,完成一个浮点数与二进制之间的相互转换【输入描述】两个数字,第一个数字表示要转换的数字,浮点型。第二个是...

    公路(road)

    公路(road)

    【题目描述】小苞准备开着车沿着公路自驾。公路上一共有n个站点,编号为从1 到n。其中站点i与站点i+1 的距离为vi公里。公路上每个站点都可以加油,编号为i 的站点一升油的价格为a...

    【题解】约瑟夫问题2

    【题解】约瑟夫问题2

    【题目描述】M个人围成一圈,每分钟相邻的两个人可以交换位置(只能有一对交换)。求使M个人的顺序颠倒(即每个人左边相邻的人换到右边,右边相邻的人换到左边)所需的最少时间(分钟数)。【输入描述】 ...

    【算法】走迷宫

    【题目描述】一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜...