1. 程式人生 > >bzoj1857 三分套三分

bzoj1857 三分套三分

const lim=1e-12;
type dot=record
           x,y:extended;
         end;
var a,b,c,d,l,r,mid1,mid2:dot;
    x,y,secx,secy,p,q,o:extended;
function dist(x,y:dot):extended;
begin
  dist:=sqrt(sqr(x.x-y.x)+sqr(x.y-y.y));
end;
function divide(fin:dot):extended;
var mid1,mid2,l,r:dot;
    secx,secy,x,y:extended;
begin
  l:=a; r:=b;
  repeat
    secx:=(r.x-l.x)/3
; secy:=(r.y-l.y)/3; mid1.x:=l.x+secx; mid1.y:=l.y+secy; mid2.x:=r.x-secx; mid2.y:=r.y-secy; x:=dist(a,mid1)/p+dist(mid1,fin)/o; y:=dist(a,mid2)/p+dist(mid2,fin)/o; if x<y then r:=mid2 else l:=mid1; until dist(l,r)<lim; exit(x); end; begin readln(a.x,a.y,b.x,b.y); readln(c.x,c.y,d.x,d.y); readln(p,q,o); l:=c; r:=d; repeat secx:=(r.x-l.x)/3
; secy:=(r.y-l.y)/3; mid1.x:=l.x+secx; mid1.y:=l.y+secy; mid2.x:=r.x-secx; mid2.y:=r.y-secy; x:=divide(mid1)+dist(mid1,d)/q; y:=divide(mid2)+dist(mid2,d)/q; if x<y then r:=mid2 else l:=mid1; until dist(l,r)<lim; writeln(x:0:2); end.