社区讨论

刚学 实数二分,被卡精度,求助

P1542包裹快递参与者 7已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mi865krk
此快照首次捕获于
2025/11/21 09:15
4 个月前
此快照最后确认于
2025/11/21 09:15
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

#define maxn 200003
#define eps 0.00000001
int n;
long double x[maxn],y[maxn],z[maxn];
long double L=0.0,R,mid,ans;
long double st;
template <typename Tp>
void read(Tp &x){
	x=0;char ch=1;int fh;
	while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
	if(ch=='-'){
		fh=-1;ch=getchar();
	}
	else fh=1;
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	x*=fh;
}

bool check(){
	double t=0.0;
	for(int i=1;i<=n;i++){
		t=t+z[i]/mid;
		if(t<x[i]) t=x[i];
		if(t>y[i]) return false;
	}
	return true;
}

int main(){
	read(n);
	for(register int i=1;i<=n;i++){
		cin>>x[i]>>y[i]>>z[i];
		R=R+z[i];
	}
	while(R-L>eps){
		mid=(L+R)/2.0;
		if(check()){
			ans=mid;R=mid-eps;
		}
		else L=mid+eps;
	}

	cout<< fixed << setprecision(2) <<ans<<endl;
	return 0;
}

WA #10 应该是被卡精度了

回复

7 条回复,欢迎继续交流。

正在加载回复...