На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Я писал два варианта программы piece и прошли оба...
Но первый вариант очень тупой и поэтому я написал второй...
МоЁ первое решение: (большая погрешность)
{$N+}
var a,b,c,d,h,p,r,x1,x2,x3,y1,y2,y3:extended;
begin
read(r,x1,y1,x2,y2,x3,y3);
a:=sqrt(sqr(x1-x3)+sqr(y1-y3));
b:=sqrt(sqr(x1-x2)+sqr(y1-y2));
c:=sqrt(sqr(x2-x3)+sqr(y2-y3));
p:a+b+c)/2;
h:=2*sqrt(abs(p*(p-a)*(p-b)*(p-c)))/c;
if h-r>1e-6 then
write('-1')
else
write(2*sqrt(abs(sqr(r)-sqr(h))));
end.
Я знаю тесты, на которых погрешность достигает 0.001
По идее такую прогу не должны были принять...
Поза форумом
Че за последгяя формула?
(это первый тур помни)
Поза форумом
А почему погрешность тут большая?
Поза форумом
Формула Герона...
Интересно...
Поза форумом
ПОПРОБУЙ тест
1 0 -1000 1 10000 1 9999 или аналогичные.
погрешность большая потому что складывается большое число с маленьким...
Поза форумом
Однако разрядной сетки хватает, чтобы хранить все цифры числа точно. до взятия корня. а после взятия корня число уже не большое, и разрядов 10-12 остается на знаки после точки. значит погрешность не такая уж большая
Поза форумом
единственное место для возникновения погрешности - это тут. p*(p-a)*(p-b)*(p-c)
но корень можно извлекать из первых двух множителей и из вторых отдельно. тогда все будет ок.
Поза форумом
Погрешность в (p-a)*(p-c) (если a и b намного больше с)
А если real то вообще дрянь...
Поза форумом