可能是直角三角形吗?

yob*_*o97 2 c math

给定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);
   }
Run Code Online (Sandbox Code Playgroud)

我的方法:
给定s,如果我们相乘4,那么它是2*a*b,三角形的其他边ab位置.然后我找到了(a+b)^2,(a-b)^2就像我一样h*h=a^2+b^2.它甚至通过了自定义测试用例:

4
5 6
6 10
258303 89837245228
616153 77878145466
Run Code Online (Sandbox Code Playgroud)

输出:

4.000000 3.000000 5.000000
-1
-1
546189.769984 285168.817674 616153.000000
Run Code Online (Sandbox Code Playgroud)

但答案被判断为错误.我不能拿起怎样的答案可能出错给出0<=h<=10^90<=s<=10^12.问题链接 -
https://www.codechef.com/problems/RIGHTTRI

Mar*_*ans 5

也许我错了,但如果我读了所需的输出:

在一行中输出每个测试用例的答案.如果找不到这样的三角形,则输出-1.否则,打印3个实数,对应于以非递减顺序排序的三角形边长.请注意,三角形边的长度与正确长度的绝对值差异不应超过0.01.

你的输出没有排序...我猜非递减顺序意味着增加订单...也许在其他任何事情之前先试一试......

(根据评论编辑的问题):

非递减顺序意味着您必须按长度从最低到最高对它们进行排序:

3.000000 4.000000 5.000000

主要是数学问题的问题是要了解他们对你的要求......