我先是没有审题,题目中说输入的数据都是整数,所以数组a是整型。然后,
cnt应该是整型,因为cnt表示的是段数。算cnt的时候要在前面加floor,flo
or是向下取整。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
const int N=100000+10;
int a[N],n,m;
bool check(double mid)
{
int cnt=0;
for(int i=0;i<n;i++)
cnt+=floor(a[i]/mid);
if(cnt>=m)
return true;
else
return false;
}
int main()
{
//freopen("xxx.in","r",stdin);
//freopen("yyy.out","w",stdout);
cin >> n >> m;
int maxx=-1;
for(int i=0;i<n;i++)
{
cin >> a[i];
if(a[i]>maxx)
maxx=a[i];
}
double l=0,r=maxx;
while((r-l)>1e-4)
{
double mid=(l+r)/2;
if(check(mid))
l=mid;
else
r=mid;
}
cout << fixed << setprecision(2) << l << endl;
//fclose(stdin);
//fclose(stdout);
return 0;
}