题目分析:就是简单的二分搜索问题。下界是一厘米,上届是输入的最大值。
代码:
#include <iostream>
#include <iomanip>using namespace std;
const int MAX=10000;
int cables[MAX+1];
int n;
int cut(int len)
{
int i,sum=0;
for(i=0;i<n;++i)
sum+=cables[i]/len;
// cout<<sum<<endl;
return sum;
}
int main()
{
int m;
double temp;
cin>>n;
cin>>m;
int maxValue=0;
for(int i=0;i<n;i++)
{
cin>>temp;
//convert meter into centimeter
cables[i]=int(temp*100);
if(cables[i]>maxValue)
{
maxValue=cables[i];
}
}
int left=1,right=maxValue,mid,ans=0;
do
{
mid=(left+right)/2;
if(cut(mid)<m)
{
right=mid-1;
}
else
{
ans=mid;
left=mid+1;
}
}while(left<=right);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<(double)ans/100<<endl;
return 0;
}