话说时间已经不是在寒假里面了。。。没关系
来源:POJ1064
还是二分题目,其实二分的题最好还是要多练练,虽然已经有一定的感觉,但是还是要自己写,回头准备自己拉题目做。。。
来看这个题:
其实还蛮简单,水过去了,最后那个精度控制值得探讨:
AC代码(VJ提交):
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int MAXN=10010;
double line[MAXN];
int n,k;
bool judge(double mid){
int i;
int cnt=0;
for(i=0;i<n;i++){
cnt+=(int)(line[i]/mid);
}
if(cnt>=k)return 1;
return 0;
}
int main(){
scanf("%d%d",&n,&k);
double sum=0;
memset(line ,0,sizeof(line));
for(int i=0;i<n;i++){
scanf("%lf",&line[i]);
sum+=line[i];
}
double l=0;
double r=sum/k;
while(fabs(r-l)>1e-8){
double mid=(l+r)/2.0;
if(judge(mid)){
l=mid;
}
else{
r=mid;
}
}
if((int)(r*1000)%10>=5) r-=0.005;
printf("%.2f\n",(double)r);//这个地方好像是POJ的原因,.f提交AC,而.lf提交WA
return 0;
}