bzoj1857 三分套三分

2 篇文章 0 订阅

题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1857
这算是bzoj为数不多的水题之一了吧,打这题目是为了练一练三分。。
就是三分套三分的模板题,三分在AB和CD上的坐标。。
代码(来自网络):

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值