您的位置:首页 > 其它

POJ 1064 Cable master

2015-08-27 18:03 260 查看
题意:n条绳子,长度分别为Li,如果从中截取K条相同的绳子,每条最长是多少(两位小数)?

题解:题解很巧妙,直接二分搜索,从0到INF二分循环100遍,便可以达到精度要求

#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#define INF 0x3f3f3f3f
#define maxn 10100
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
typedef long long ll;
int n,k;
double a[maxn];
bool C(double x)
{
int num = 0;
for(int i = 0; i < n; ++i)
num += (int)(a[i] / x);
return num >= k;
}
void solve()
{
double lb = 0,ub = 1<<20;
for(int i = 0; i < 100; i++)
{
double mid = (lb + ub) / 2;
if(C(mid))
lb = mid;
else
ub = mid;
}
printf("%.2f\n",floor(lb*100)/100);
}
int main()
{
scanf("%d%d",&n,&k);
for(int i = 0; i < n; i++)
scanf("%lf",&a[i]);
solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: