【POJ】[1064]Cable master
对结果进行二分搜索
计算当前的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;
}