简单题意
给出每个管子的长度,让你确定最长切割长度,把管子按照切割长度切成给定的数量
解题思路形成过程
用二分法在能保证数量的基础上求得最大值
感想
说真的题干略长,读的不是很明白,跟着模糊理解,看了看输入输出数据,测试了一下自己的方法,成立,就这样做了,不过在选切割长度上限的时候一开始选了最短的的长度作为上线,在杭电题库试了一下WA,才想起来其实要是能保证数量的话,短的管子可以舍弃,于是就选了平均长度作为上限。
AC代码
#include<iostream>
#include<stdio.h>#include<fstream>
using namespace std;
double a[10005];
int main()
{
//ifstream cin("in.txt");
freopen("in.txt","r",stdin);
int n,k;
double high,low,mid;
int cnt;
while(scanf("%d%d",&n,&k)&&(n||k)){
high=0;low=0;
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);
high+=a[i];
}
high/=k;
while(high-low>1e-8){
cnt=0;
mid=(high+low)/2;
for(int i=0;i<n;i++){
cnt+=(int)(a[i]/mid);
}
if(cnt>=k)low=mid;
else high=mid;
}
printf("%.2lf\n",mid);
}
return 0;
}