题目:http://poj.org/problem?id=1064
采用二分法,因为保留两位小数,为避免四舍五入将其转化为整数的二分。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <math.h>
#include <queue>
using namespace std;
const int maxn = 10005;
const int inf = 10000005;
int cab[maxn];
int n,k;
bool check(int mid){
int temp = 0;
for(int i = 0;i < n;i++)
temp += cab[i]/mid;
return temp>=k;
}
int main(){
while(~scanf("%d%d",&n,&k)){
for(int i = 0;i < n;i++){
double tt;
scanf("%lf",&tt);
cab[i] = tt*100;
}
int l = 1,r = inf;
while(l <= r){
int mid = (l+r)/2;
if(check(mid))
l = mid+1;
else
r = mid-1;
}
printf("%.2f\n",(double)r/100.0);//如果是%.2lf就WA,不知道为什么
}
return 0;
}