program chasing;(* ho risolto pensando a un riferimento cartesiano centrato nel punto dove si trova la palla. Il tdog indica il tempo che il cane impiega per allinearsi alla palla sull'asse x se dir è R o L oppure sull'asse y se dir è U o D, durante questo tempo la palla si sposta con la sua velocità nella direzione dir e quindi trovo spostpall e di conseguenza la nuovacoord della palla dopo lo spostamento. In base alla nuova posizione della palla rispetto al cane si valuta se il cane deve muoversi verso la palla con velocità positiva o negativa e quindi si calcola la velocità relativa Ds+/-Bs. Dopo vari tentativi con valori e posizioni diverse ho capito in quali casi le distanze andavano prese in valore assoluto e quando invece serviva tenerle con il loro segno*)
Uses Math;
var
Bs, Bx, By, Ds, Dx, Dy, T, dist :Longint;
dir :Char;
tdog,spostpall,nuovacoordpall :real;
begin
ReadLn(Dx, Dy, Ds);
ReadLn(Bx, By, Bs);
ReadLn(dir);
T :=0;
if dir='R'then
begin
dist:=(Dx-Bx);
tdog:=abs(Dy-By)/Ds;
spostpall:=Bs*tdog;
nuovacoordpall:=Bx+spostpall;
if nuovacoordpall<=Dx then Ds:=-Ds
elseif Ds<=Bs thenbeginwriteln(-1); exit;end;
T:=ceil(tdog+(abs(dist-spostpall))/(abs(Ds-Bs)));
end;
if dir='L'then
begin
BS:=-Bs;
dist:=(Dx-Bx);
tdog:=abs(Dy-By)/Ds;
spostpall:=Bs*tdog;
nuovacoordpall:=Bx+spostpall;
if nuovacoordpall<=Dx thenbeginif Ds<=abs(Bs)thenbeginwriteln(-1); exit;end
else Ds:=-Ds;
end;
T:=ceil(tdog+(abs(dist-spostpall))/(abs(Ds-Bs)));
end;
if dir='D'then
begin
BS:=-Bs;
dist:=abs(Dy-By);
tdog:=(abs(Dx-Bx)/Ds);
spostpall:=Bs*tdog;
nuovacoordpall:=By+spostpall;
if nuovacoordpall<Dy thenbeginif Ds<=abs(Bs)thenbeginwriteln(-1); exit;end