怎么讲,一道水题,但是处理起来比较麻烦
就是先把读入的分数乘以100用int来处理
仔细想想就好,就当是二分的模板
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
int n,k;
int a[10010];
bool check(int mid)
{
int cnt = 0 , num = 0;
for(int i=0;i<n;i++){
num = a[i]/mid;
cnt += num;
}
if(cnt >= k) return true;
else return false;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
double x;
for(int i=0; i<n; i++){
scanf("%lf",&x);
a[i] = (int)(x*100.0);
}
int l = 1, r = 100000000;//注意l这里取0会RE
int ans = 0;
while(r>=l){
int mid = (l+r)>>1;
if(check(mid)){
l = mid + 1;
ans = mid ;
}
else r = mid - 1;
}
printf("%.2f\n",ans*0.01);
}
return 0;
}