Олимпиадные задачи по программированию. Лучшие решения. Часть 1. Ускова О.Ф - 63 стр.

UptoLike

Var TX1,TX2,TY1,Ty2,Sq:Double;
Begin
Sq:=sqrt(3)*D/Sqrt(Sqr(A)+Sqr(B));
TX1:=PX+B*sq;TY1:=PY-A*Sq;
TX2:=PX-B*Sq;TY2:=PY+A*Sq;
PX:=Dest(TX1-X,Ty1-Y);
PY:=Dest(TX2-X,Ty2-Y);
If Px<Py Then Begin Tx:=Tx1;Ty:=Ty1 End
Else Begin Tx:=Tx2;Ty:=Ty2 End
End;
Function FindOneSideDest(Var tx1,Ty1,Tx2,ty2:Double):Double;
{Решение задачи для случая 2}
Var D1,D2,PX1,PY1,Px2,Py2,LX1,LY1,LX2,LY2,T,Res:Double;
Begin
Proj(X1,Y1,PX1,PY1);
D1:=Dest(PX1-X1,PY1-Y1);
FindPoint(PX1,PY1,X2,Y2,D1,Lx1,Ly1);
Proj(X2,Y2,PX2,PY2);
D2:=Dest(PX2-X2,PY2-Y2);
FindPoint(PX2,PY2,X1,Y1,D2,Lx2,Ly2);
{Случай 2 в}
Res:=D1+D2;
Tx1:=Px1;Ty1:=Py1;Tx2:=Px2;Ty2:=Py2;
{Случай 2 а}
T:=Dest(X2-X1,Y2-Y1);
If (D2>T) or (D1>T) Then
If D1>D2 Then Begin
Tx1:=x2;ty1:=Y2;Tx2:=Px2;Ty2:=Py2;Res:=D2+T End