Cable master题解

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,k;
double line[10055];
int cou(double num){(计算可以分割成的电缆数)
	int tot=0,i;
	for(i=1;i<=n;i++)
		tot+=line[i]/num;
	return tot;
}
int main(){
	scanf("%d%d",&n,&k);
	int i;
	double left=0.00,right=0,mid;
	for(i=1;i<=n;i++){
	 scanf("%lf",&line[i]);
	 right+=line[i];
    }
	right/=k;
	sort(line+1,line+n+1);
	
	int kk=0;
	
	while(right-left>=0.001){
		mid=(left+right)/2;
		kk=cou(mid);
		if(kk<k)right=mid;(如果少了就把切割的米数少一点,分得多些)
		else left=mid;
	}
	
	right=floor(right*100)/100;(这里判断下,左右两个其实都有可能是答案)
	left=floor(left*100)/100;
	if(cou(right)>=k)
	 printf("%.2lf",right);
	else printf("%.2lf",left);
}

结论:最后的我以为是答案小于1就输出0.00,结果在这里捣鼓半天,前面倒是没有太大的问题。


版权声明:本文为qq_36550533原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。