【LightOJ】[1062]Crossed Ladders

文章字数:174

问题描述

Crossed Ladders

问题分析

可以根据题目列出一个关于高度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进行比较
从而进行二分查找

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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;
}

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...