某地区即将举行区域程序设计比赛,竞赛委员会已经成立并决定举行一次最公平的竞赛,他们决定利用星形拓扑结构来连接每个竞赛者的电脑—也即连接这些电脑到一个中心HUB上;为了达到真正的公平竞赛目的,竞赛委员会主任下令要求:每个竞赛电脑连接到中心HUB的电缆必须是一样长的。 竞赛委员会联系了一个本地的电缆老板,要求老板为他们提供一定量的相同长度的电缆,而且要求电缆长度越长越好。通过调查,电缆老板知道仓库中每根电缆的长度(精确到厘米),而且他可以以厘米的精度剪断电缆,但确不知道他能为竞赛委员会提供的每根电缆的最大长度是多少? 你的任务就是:编程求出每根电缆的最大可能的长度。
第1行,2个整数N和K,N是仓库中的电缆条数,K是竞赛委员会要求的电缆条数。其中1
仅1行,为提供给竞赛委员的电缆最大长度(精确到小数点两位)
简单的二分答案题。
#include <cstdio> #include <algorithm> #include <cmath> using namespace std; int n,k; double len[11000],maxlen=0; double reset(double a){ return double(int(a*100)/100); } double erfen(double left,double right){ if(right-left<0.0001) return left; double mid=(left+right)/2; int cnt=0; bool flag=false; for(int i=1;i<=n;i++){ cnt+=floor(len[i]/mid); if(cnt>=k){ flag=true; break; } } if(flag) return erfen(mid,right); else return erfen(left,mid); } int main(){ freopen("cable.in","r",stdin); freopen("cable.out","w",stdout); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%lf",&len[i]); maxlen+=len[i]; } double ans=erfen(0,maxlen/k); printf("%.2lf",ans); return 0; }试试1 3 2.00这组数据呢? 上面的程序错在哪里?
转载于:https://www.cnblogs.com/leotan0321/p/6081366.html
相关资源:数据结构—成绩单生成器