您的位置:首页 > 其它

搜索专题 O

2017-05-21 22:16 106 查看
1、简单描述

n段网线,重新切割成k段。

2、思路

二分查找乱入搜索专题,不过所有的的算法都是搜索的优化,貌似没毛病。

#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <cmath>
using namespace std;
double l[10005];
int n,k;
const double eps = 1e-8;
bool judge(double x)
{
int num=0;
for(int i=0;i<n;i++)
{
num+=(int)(l[i]/x);
}
return num>=k;
}
int main()
{

while(scanf("%d%d", &n, &k) != EOF)
{
if(n+k == 0)
break;
int sum = 0;
for(int i = 0; i < n; i++)
{
scanf("%lf", &l[i]);
sum += l[i];
}
double l = 0.0, r = sum;
while(eps<fabs(l-r))
{
double mid=(l+r)/2;
if(judge(mid))
l=mid;
else
r=mid;
}
printf("%.2f\n",l);
}
return 0;
}

之前二分贪心专题时做过这道题,很开心地敲出来,以为坑都知道,结果WA了好几次,伤感。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: