原题链接
题意
给你N根绳子,然后给你一个K值,问绳子能切割成的最大长度,答案保留两位小数
思路
1.二分的板子题,但是这个卡精度,最后要注意向下取整
2.枚举绳子的长度,判断给定的条件是否能切成这样的长度即可
AC代码
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=10010;
int n,k;
double a[N];
bool check(double x){
int cnt=0;
for(int i=1;i<=n;i++){
cnt+=a[i]/x;
}
if(cnt>=k){
return true;
}else{
return false;
}
}
double bsearch(){
double l=0.00,r=100000.00;
while (r-l>1e-4){
double mid=(l+r)/2;
if(check(mid)){
l=mid;
}else{
r=mid;
}
}
return r;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
double res=bsearch();
printf("%.2f\n",floor(res*100)/100);
return 0;
}