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

【题解】切割绳子

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

【题目描述】

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


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

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

分享给朋友:

相关文章

【题解】东哥的杯子

【题解】东哥的杯子

【题目描述】话说在一场牛客练习赛中,东哥力压群雄,挣得第一,牛客为了奖励东哥的发挥,送他一个马克杯。奖励的马克杯是一个标准的圆台形状,它的上底为R1,下底为R2,高为H, 东哥向杯子里倒V毫升的水,你...

【题解】山区建小学

【题目描述】政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<...

【题解】大数取模

【题目描述】求m%n。【输入描述】两个数,m和n。【输出描述】m模n的值。【样例输入】3【样例输出】2【数据范围】对于30%的数据, 1<m<10^18对于70%的数据, m>10^...

【题解】字符串

【题目描述】Kri 非常喜欢字符串,所以他准备找 t组字符串研究。 第 i次研究中, Kri 准备了两个字符串S 和R ,其中S 长度为n ,且只由  0 , 1 , -  三种...

生日

【题目描述】cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序。但cjf君最近作业很多,没有时间,所以请你帮她排序。【输入描述】有2行,第1行为OI组总人数n;第2行至第n+1行分别是每...

【题解】加密(2019青岛市程序设计竞赛)

【问题描述】文件加密最简单的方法是把文件的原文中的每个字母用另一个字母来代替。假设原文中只包括26个英文字母(有大写和小写),没有其他符号,且长度不超过100,加密规则如下:原文abcdefghijk...