切绳子

题目描述

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

输入输出格式

输入格式:

一行两个整数N和K,接下来N行,描述了每条绳子的长度Li。

输出格式:

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

输入输出样例

输入样例#1: 
4 11
8.02
7.43
4.57
5.39
输出样例#1: 
2.00

说明

对于100%的数据 0<Li<=100000.00 0<n<=10000 0<k<=10000

 

分析:

本题同样是一道二分答案题目,ok函数也较为好写,只需要做除法进行叠加,最后判断即可

 

CODE:

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <iostream>
 6 using namespace std;
 7 double a[100005];
 8 int n,k;
 9 int ok(int x){
10     int ans=0;
11     for (int i=1;i<=n;i++) ans+=(int)(a[i]/x);
12     return ans>=k;
13 }
14 int main(){
15     //freopen("cable.in","r",stdin);
16     //freopen("cable.out","w",stdout);
17     scanf("%d%d",&n,&k);
18     for (int i=1;i<=n;i++) scanf("%lf",&a[i]),a[i]*=100;
19     int l=1,r=10000000;
20     while (l<=r){
21         int mid=(l+r)/2;
22         if (ok(mid)) l=mid+1;
23         else r=mid-1;
24     }
25     printf("%.2lf",r*0.01);
26     return 0;
27 }

 

posted @ 2019-07-15 12:31  Sword_Art_Online  阅读(418)  评论(0编辑  收藏  举报