POJ – 1064 Cable master

题目大意:给你n段不同长度的绳子(棍子),然后让你将这么n个绳子一共取长度相同的k段,问你每段最大有多长。
解:简单的二分查找呀(゚▽゚)
但!我居然WA了三遍!!!
我的天,这题我一开始没注意数据把查找区间设的太大,TLE了一遍,
再然后,最后输出的最大长度的精度没有处理,又WA了一遍,
最后又不可描述的WA了一遍 Σ( ° △ °|||)
ps.稍微吐槽一下,poj的数据好水啊,我的r开的那么小居然都能过样例(⊙ˍ⊙)
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> using namespace std; int n,k; double a[100005]; bool search(double x) { int sum=0; for(int i=0;i<n;i++) sum+=(int)(a[i]/x); return sum>=k; } void solve() { double l=0,r=100005; for(int i=0;i<100;i++) { //cout<<r; double mid = (l + r) / 2; if(search(mid)) l=mid; else r=mid; } printf("%.2lf\n",floor(r*100)/100);//千万不要忘了精度的问题!!! } int main() { scanf("%d%d",&n,&k); for(int i=0;i<n;i++) scanf("%lf",&a[i]); solve(); }
发表评论