疑问
  • 板块P1577 切绳子
  • 楼主meifan666
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/16 09:03
  • 上次更新2024/7/16 10:20:44
查看原帖
疑问
1284088
meifan666楼主2024/7/16 09:03
#include<bits/stdc++.h>
#define eps 0.001
using namespace std;
int n,k;
double l,r;
double sumt,ans,rans;
double a[10010];
bool check(double x){
	int sum;
	for(int i=1;i<=n;i++){
		sum+=(int)(a[i]/x);
	}
	if(sum>=k)return 1;
	return 0;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sumt+=a[i];
	}
	l=0;
	r=sumt;
	while(r-l>=eps){
		double mid=(l+r)/2;
 		printf("%.2lf ",mid);
		if(check(mid)){
			ans=mid;
			l=mid+eps;
		}else{
			r=mid-eps;
		}
	}
	printf("%.2lf",ans);
	return 0;
}

这样测试是正确

#include<bits/stdc++.h>
#define eps 0.001
using namespace std;
int n,k;
double l,r;
double sumt,ans,rans;
double a[10010];
bool check(double x){
	int sum;
	for(int i=1;i<=n;i++){
		sum+=(int)(a[i]/x);
	}
	if(sum>=k)return 1;
	return 0;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sumt+=a[i];
	}
	l=0;
	r=sumt;
	while(r-l>=eps){
		double mid=(l+r)/2;
//		printf("%.2lf ",mid);
		if(check(mid)){
			ans=mid;
			l=mid+eps;
		}else{
			r=mid-eps;
		}
	}
	printf("%.2lf",ans);
	return 0;
}

注释掉就不对

找个大犇求解

2024/7/16 09:03
加载中...