一次性AC,一开始没有审清楚题,数据类型定义混乱。二分时l=mid和r=mid写反了。
#include<iostream>
#include<iomanip>
using namespace std;
const int N=1e5+10;
int l[N];
int n,m;
double maxx=-1;
bool check(double mid)
{
int js=0;
for(int i=0;i<n;i++)
js+=l[i]/mid;
if(js>=m)
return true;
else
return false;
}
int main()
{
// freopen("xxx.in","r",stdin);
// freopen("yyy.out","w",stdout);
cin >> n >> m;
for(int i=0;i<n;i++)
{
cin >> l[i];
if(l[i]>maxx)
maxx=l[i];
}
double l=0,r=maxx,dlt=1e-4;
while((r-l)>dlt)
{
double mid=(l+r)/2;
if(check(mid))
l=mid;
else
r=mid;
}
cout << fixed << setprecision(2) << l;
// fclose(stdin);
// fclose(stdout);
return 0;
}