Posted on 2010-12-21 12:54
Onway 閱讀(863)
評論(0) 編輯 收藏 引用 所屬分類:
傷不起的ACM
/*
pku 1064 Cable master
http://poj.org/problem?id=1064
題目分類:二分搜索
題意:給出n根不同長度的電纜,要求將這些電纜分割成長度最大且相同的m根。
思路:由題目給出的數(shù)據(jù)規(guī)模,最大長度在1厘米到100公里(1千萬厘米)之間,
可以二分搜索最大長度。
總結:由于對二分不熟悉,也是看了別人的提示才想到切入點。有了切入點后,
這個題目基本上就算是水題了。寫出來交上去居然是果斷的WA,在discuss看了
很多人都說是卡精度。改了幾次交上去還是WA,后來自己出的數(shù)據(jù)發(fā)現(xiàn),原來是
二分的一個變量賦值搞錯了。
二分的思路很簡單,但細節(jié)很多,很容易就會寫錯。
*/
#include <iostream>
#include <iomanip>
using namespace std;
const int MAX=10000;
const int LARGE=10000000;
int cable[MAX+1];
int n,m;
int cut(int len)
{
int i,sum=0;
for(i=1;i<=n;++i)
sum+=cable[i]/len;
return sum;
}
int main()
{
int i;
double tmp;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%lf",&tmp);
cable[i]=int(tmp*100);
}
//end input
int left=1,right=LARGE,mid,ans=0;
do
{
mid=(left+right)/2;
if(cut(mid)<m)
right=mid-1;
else
{
ans=mid;
left=mid+1;
}
}while(right>=left&&right>0);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<double(ans/100.0)<<endl;
}