问题描述
问题分析
可以根据题目列出一个关于高度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;
}
|