GitBook

这里写图片描述

对结果进行二分搜索 计算当前的mid可以分多少份 与k进行比较 判断条件也很好写

然而……

这是卡精度的一题 需要注意的是因为题意 所以最后结果不可以四舍五入 需要进行舍弃

而进制转换和double的灵异机制 导致这一题最后的数据处理会很麻烦

这里是因为逼得…… 所以用了一种很逗的方式输出……

测试数据:

4 2540 8.02 7.43 4.57 5.39

=>0.01

4 2542 8.02 7.43 4.57 5.39

=>0.00

#include<stdio.h>
double a[10200];
int n,k;
bool judge(double m) {
	int cnt=0;
	for(int i=0; i<n; i++)
		cnt+=a[i]/m;
	if(cnt>=k)
		return true;
	else
		return false;
}
int main() {
	while(scanf("%d %d",&n,&k),n||k) {
		for(int i=0; i<n; i++)
			scanf("%lf",&a[i]);
		double l=0.0,r=10000000.0,res;
		while(r-l>1e-6) {
			double mid=(l+r)/2;
			if(judge(mid)) {
				l=mid;
				res=mid;
			} else
				r=mid;
		}
		__int64 t=res*100.0+0.0001;
		printf("%I64d.%02I64d\n",t/100,t%100);
	}
	return 0;
}

题目地址:【POJ】[1064]Cable master