GitBook

这里写图片描述

可以根据题目列出一个关于高度c和间隔d的方程

$ \dfrac{c }{\sqrt{x^2 - d^2}} + \dfrac{c }{\sqrt{y^2 - d^2}} = 1$ 化简得

$ c =\dfrac{1}{ \dfrac{1 }{\sqrt{x^2 - d^2}} + \dfrac{1 }{\sqrt{y^2 - d^2}}} $

可知若d比res大 则c应该比所给c小 由此可把mid与res进行比较 从而进行二分查找

#include<stdio.h>
#include<math.h>
double x,y,c;
bool judge(double m) {
	double res=1.0/(1.0/sqrt(y*y-m*m)+1.0/sqrt(x*x-m*m));
	if(res>c)
		return true;
	else
		return false;
}
int main() {
	int T,kase=0;
	scanf("%d",&T);
	while(T--) {
		scanf("%lf %lf %lf",&x,&y,&c);
		double l=0,r=(x<y?x:y);
		while(r-l>1e-8) {
			double mid=(l+r)/2;
			if(judge(mid))
				l=mid;
			else
				r=mid;
		}
		printf("Case %d: %.8lf\n",++kase,l);
	}
	return 0;
}

题目地址:【Light】[1062]Crossed Ladders