二分答案
写了一下就出来了...但是在二分那里卡住了
先po上代码 日后再解惑
//
// Created by xingchaoyue on 2019/5/15.
//
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
int a[10000+100];
int ri = 0;
int le = 0;
bool judge(int x){
int cnt = 0;
for(int i =0;i<n;++i){
int now = a[i];
cnt+=a[i]/x;
}
if(cnt>=m){
return true;
}
else{
return false;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i =0;i<n;++i){
double num;
scanf("%lf",&num);
a[i] = (int)(num*100);
if(a[i]>ri){
ri = a[i];
}
}
//ri = 0x3f3f3f;
while(le<=ri){
int mid = (le+ri)>>1;
if(mid==0){
ri = 0;
break;
}
if(judge(mid)){
le = mid+1;
}
else{
ri = mid-1;
}
}
printf("%.2f\n",ri*1.0/100);//为什么输出ri而不是le?
}