您的位置:首页 > 其它

poj 1064 Cable master 二分长度

2013-11-04 16:02 441 查看
题目大意就是给你n条绳子,和每条绳子的长度,要求你切出k条相同长度的绳子。求能够切的最大长度,答案保留两位小数

这道题就是给定一个上限和下限对答案进行二分然后注意处理一下精度就ok了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
#define inf 0x7fffffff
int n,k;
double kep[10000];
bool C(double x)
{
int  sum=0;
for(int i=0;i<n;i++)
{
sum=sum+(int)(kep[i]/x);
}
if(sum>=k)
return true;
else
return false;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
scanf("%lf",&kep[i]);
double le,rg,mid;
le=0,rg=inf;
for(int i=0;i<100;i++)      //这里开到100就是对精度进行处理
{
mid=(rg+le)/2;
if(C(mid))
le=mid;
else
rg=mid;
}
printf("%.2lf\n",floor(le*100)/100);
}
// system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: