您的位置:首页 > 其它

二分查找

2010-11-25 22:27 99 查看
/*

* 二分查找

*/

#include<iostream>

#include<cstdio>

using namespace std;

const int MAX = 10240;

int cutOk(int mid);

int n, k;

int cable[MAX];

int main()

{

int i;

double res;

int begin=0, end=0;

#ifndef ONLINE_JUDGE

freopen("E://1//cable.in", "r", stdin);

freopen("E://1//cablew.out", "w", stdout);

#endif

while(scanf("%d %d", &n, &k) !=EOF && n!=0 && k!=0)

{

for(i=0; i<n; i++)

{

int a, b;

scanf("%d.%d", &a, &b);

cable[i] = a*100 + b;

if(cable[i]>end)

end = cable[i];

}

while(begin+1<end)

{

int mid = begin + (end-begin)/2;

if(cutOk(mid))

begin = mid;

else

end = mid;

}

if(cutOk(end)&&end>begin) begin = end;

res = (double)begin/100;

printf("%.2f/n",res);

}

getchar();

return 0;

}

int cutOk(int mid)

{

int nn, i;

for(nn=0,i=0; i<n; i++)

{

nn += cable[i]/mid;

if(nn>=k)

return 1;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: