题意:给出n条线段,以米的单位给出,小数点后两位(精确到厘米),要你对这些线段裁剪,裁剪出m条等长的线段,并且让这些线段尽可能长另外线段的长度不能小于1厘米,如果筹不够m条,输出0.00
#include<cstdio> #include<cstring> #include<iostream> #include<string> #include<algorithm> using namespace std; const int maxn=10010; double num[maxn]; double eps=1e-5; int main() { int n, k; while(scanf("%d %d", &n, &k)==2) { double maxvalue=0; for(int i=0;i<n;i++) { scanf("%lf", num+i); if(num[i]>maxvalue) maxvalue=num[i]; } double lp=0, rp=maxvalue; while(rp-lp>eps) { double mid=(rp+lp)/2; //printf("lp %lf,mid %lf, rp %lf\n", lp, mid, rp); int sum=0; for(int i=0;i<n;i++) { sum+=num[i]/mid; } //printf("sum %d\n", sum); if(sum>=k) lp=mid; else rp=mid; } printf("%.2lf\n", int(rp*100)*0.01); } return 0; }
poj 1064 Cable master,布布扣,bubuko.com
原文:http://www.cnblogs.com/cute/p/3607913.html