Acwing网址:
https://www.acwing.com/video/2299/
需要注意的情况:
若题目中给出保留k位小数,则精度范围是1e-(2+k),例如保留两位小数r-l<1e-4
测试样例:
3 4
3 5 4
代码:
#include<iostream>
using namespace std;
const int N=1e5+10;
int n,k;
int l[N];
bool check(double mid)
{
long long cnt=0;
for(int i=1;i<=n;i++)
{
cnt+=l[i]/mid;
if(cnt>=k)
return true;
}
return false;
}
int main(void)
{
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>l[i];
double l=0,r=1e9,mid;
while(r-l>1e-4)
{
mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}
printf("%.2f",r);
}
还有一些二分模板
https://www.acwing.com/blog/content/31/
第一种是递增找最小大于等于某个值最小值
第二种是递减找最小大于等于某个值的最大值