切绳子
题目描述
有N条绳子,它们的长度分别为Li。如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数)。
输入输出格式
输入格式:
一行两个整数N和K,接下来N行,描述了每条绳子的长度Li。
输出格式:
切割后每条绳子的最大长度。
输入输出样例
说明
对于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 }