题目描述:
有N条绳子,他们的长度分别为li。如果从他们中切割出k条长度相同的绳子的话,这k条绳子每条最长能有多长?答案保留两位小数。
解题思路:
这个问题可以用二分搜索解决。只需一个足够大的上限,然后二分找到最大的x。
代码:
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int n,k;
double l[10010];
bool c(double x){
int num=0;
for (int i=0;i<n;i++){
num+=(int)(l[i]/x);
}
return num>=k;
}
void solve(){
double lb=0,ub=100000;
for (int i=0;i<100;i++){
double mid=(lb+ub)/2;
if (c(mid)) lb=mid;
else ub=mid;
}
printf("%.2lf\n",floor(ub*100)/100);
}
int main(){
cin>>n>>k;
for (int i=0;i,n;i++) cin>>l[i];
solve();
}