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

【题解】切割绳子

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

【题目描述】

有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;
}


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

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

分享给朋友:

相关文章

【题解】数学游戏

【题目描述】Kri 喜欢玩数字游戏。 一天,他在草稿纸上写下了t 对正整数(x,y) ,并对于每一对正整数计算出了z=x*y*gcd(x,y);可是调皮的 Zay 找到了 Kri 的草稿纸,并把每一...

小苹果(apple)

【题目描述】小 Y 的桌子上放着n个苹果从左到右排成一列,编号为从1到n。小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。每天在拿的时候,小苞都是从左侧第1个苹果开始、每隔2个苹果拿走2个苹果。随...

【题解】均分蛋糕

【题目描述】小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个...

【题解】分糖果

【题目描述】小A在生日这天收到了哥哥送来的一盒糖果,这盒糖果共有M个,小A要把这盒糖果放到N个盘子中(允许有盘子不放),请问,有多少种不同的放法?请注意:数值相同,顺序不同,我们视为是相同的放法,比如...

【题解】合唱队形

【题目描写】N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T...

亲和数

【题目描述】自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲...