WA on #15求调
查看原帖
WA on #15求调
147895
破壁人罗辑楼主2023/11/6 11:52

用的是二分时间的做法

#include<bits/stdc++.h>
using namespace std;
int main(){
	int T;scanf("%d",&T);
	while(T--){
		double n,p1,v1,p2,v2;
		scanf("%lf%lf%lf%lf%lf",&n,&p1,&v1,&p2,&v2);
		if(p1>p2){
			double s=p1;p1=p2;p2=s;
			s=v1;v1=v2;v2=s;
		}
		double l=0,r=min(min(p1+n,n-p1+n)/v1,min(p2+n,n-p2+n)/v2);
		r=min(r,min(max(p1/v1,min(n-p2+n-p1,p2-p1+n-p1)/v2),max((n-p2)/v2,min(p2+p1,p2+p2-p1)/v1)));
		while(r-l>=1e-7){
			double mid=(l+r)*0.5,s1=v1*mid,s2=v2*mid;
			if(s1>=p1&&s2>=n-p2&&(s1+s2>=n-p1+p2||(s1+s2>=n+p1+n-p2&&s1>=2*p1&&s2>=2*(n-p2))||(s2>=2*(n-p2)&&(s1-p1)*0.5+s2-n+p2-n+p2>=p2-p1)||(s1>=2*p1&&s1-p1-p1+(s2-n+p2)*0.5>=p2-p1)))
				r=mid;
			else l=mid;
		}
		printf("%.7lf\n",r);
	}
	return 0;
}

但是过不了

2023/11/6 11:52
加载中...