【Uva10566】Crossed Ladders

来源:互联网 发布:江苏计算机二级vb真题 编辑:程序博客网 时间:2024/05/18 01:20

这里写图片描述
这里写图片描述

列出一个包含x,y,c的关系式,设宽为w,底边垂线左边为a,根据相似三角形关系:
1.a/w=c/sqrt(y*y-w*w);
2.(w-a)/w=c/sqrt(y*y-w*w);
两式合并消去a得:
c/sqrt(x*x-w*w)+c/sqrt(y*y-w*w)=1;
能推出c与w有同增同减关系,所以当带入mid小于1时,实际w大于mid;反之小于mid,以此二分,再注意精度即可(误差小于1e-6)。

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

http://acm.hust.edu.cn/vjudge/contest/123973#problem/E

0 0
原创粉丝点击