Crossed ladders(0)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2507
二つの建物の間に二つのはしごが掛かっている。与えられた条件は、2つのはしごの長さとはしごが交差する点の、地面からの高さ。求めるのは、建物の間の距離だ。statusを見る限り、全体的に短いコードで通っているのでやってみたのだがうまくいかない。
答えを求めるために方程式を作ってみたのだが、√が含まれているので消そうとすると次数が上がってしまい「???」となる。とりあえず解析的に解いてAcceptされたが、もっとスマートに解けないものか・・・。数学の得意な人求む。
とりあえず、特に短縮していないコードを載せておきますかね。
double a,b,c,l,r,s,w,x,y,z; main(){ for(;s=~scanf("%lf%lf%lf",&a,&b,&c);l=!printf("%.3f\n",w)) for(r=a>b?b:a;fabs(s-c)>1e-7;s<c?r:l=w) w=(l+r)/2, x=sqrt(a*a-w*w),y=sqrt(b*b-w*w), s=x*y/(x+y); }