给定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);
}
我的方法:
给定s
,如果我们乘以4
,那么它是2*a*b
,其中a
和b
是三角形的另一边。然后我找到了(a+b)^2
和(a-b)^2
,因为我有h*h=a^2+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
答案 0 :(得分:5)
也许我错了,但是如果我阅读了所需的输出:
在一行中输出每个测试用例的答案。如果找不到这样的三角形,则输出-1。否则打印3个实数,对应于三角形边的长度按非递减顺序排序。请注意,三角形边的长度与正确长度的绝对值差异不应超过0.01。
你的输出没有排序...我猜非递减顺序意味着增加订单...也许在其他任何事情之前先试一试......
(根据评论编辑的问题):
非递减顺序意味着您必须按长度对它们编号从最低到最高排序:
3.000000 4.000000 5.000000
主要是数学问题的问题是要了解他们对你的要求......