h
が与えられ、斜辺およびs
、表面積、可能であれば直角三角形の辺を印刷するように求められます。そうでなければ-1
を印刷します。だから私のアプローチだった。直角三角形は可能ですか?
double h,s;
scanf("%lf %lf",&h,&s);
s*=4;
double squaresum=(h*h) + s;
double squarediff=(h*h) - s;
if(squarediff<0)
printf("-1\n");
else
{
double a = sqrt(squaresum)+sqrt(squarediff);
a/=2;
double b = sqrt(squaresum)-sqrt(squarediff);
b/=2;
if(h>=a+b)
printf("-1\n");
else
printf("%.6lf %.6lf %.6lf\n",h,a,b);
}
私のアプローチ:私たちは4
を掛けた場合s
考える
は、それはa
とb
は、三角形の他の側面です2*a*b
、です。それで私はを持っているので、(a+b)^2
と(a-b)^2
が見つかりました。 はそれも、カスタムテストケースを渡さ:
4
5 6
6 10
258303 89837245228
616153 77878145466
出力:
4.000000 3.000000 5.000000
-1
-1
546189.769984 285168.817674 616153.000000
しかし、答えが間違っていると判断されています。私は、答えが間違っている可能性があるので、0<=h<=10^9
と0<=s<=10^12
を受け取ることができません。
https://www.codechef.com/problems/RIGHTTRI
精密度が高い精度です。それはないかもしれませんが、それは非常に容疑者です。デルタとの比較を試みてください。 – bolov
@bolov精度は少なくとも0.01のオーダーになっていて、6桁まで印刷していますので、精度はここの要素になりますか? – yobro97
することができます。比較の中で。たとえば、 'h 'が' 5.9999'で 'a + b'が' 6.0001'ならば、それらの差は '0.0002'であり、これは与えられた精度によく似ています。三角形は可能ですが、あなたのコードでは '> ='ではなく '-1'を出力します。どのような比較においても、「0.01」のデルタを考慮する必要があります – bolov