zoukankan      html  css  js  c++  java
  • #10017 传送带(SCOI 2010)(三分套三分)

    【题目描述】

        在一个 2 维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段 AB 和线段 CD。lxhgww 在 AB上的移动速度为 P ,在 CD 上的移动速度为 Q,在平面上的移动速度 R。现在 lxhgww 想从 A 点走到 D 点,他想知道最少需要走多长时间。

    【题目链接】

        https://loj.ac/problem/10017

    【算法】

        猜想两条线段的最优点均满足单峰性质,于是三分套三分,代码借鉴黄学长。(http://hzwer.com/4255.html)

    【代码】

        

     1 #include <bits/stdc++.h>
     2 #define eps 1e-4
     3 using namespace std;
     4 int ax,ay,bx,by;
     5 int cx,cy,dx,dy;
     6 int p,q,r;
     7 inline int read() {
     8     int x=0,f=1; char c=getchar();
     9     while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    10     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    11     return x*f;
    12 }
    13 double dis(double x1,double y1,double x2,double y2) {
    14     return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    15 }
    16 double cal(double x,double y) {
    17     double lx=cx,ly=cy,rx=dx,ry=dy;
    18     double lmx,lmy,rmx,rmy,t1,t2;
    19     while(fabs(lx-rx)>eps||fabs(ly-ry)>eps) {
    20         lmx=lx+(rx-lx)/3,lmy=ly+(ry-ly)/3;
    21         rmx=lx+(rx-lx)/3*2,rmy=ly+(ry-ly)/3*2;
    22         t1=dis(x,y,lmx,lmy)/r+dis(lmx,lmy,dx,dy)/q;
    23         t2=dis(x,y,rmx,rmy)/r+dis(rmx,rmy,dx,dy)/q;
    24         if(t1>t2) lx=lmx,ly=lmy;
    25         else rx=rmx,ry=rmy;
    26     }
    27     return dis(ax,ay,x,y)/p+dis(x,y,lmx,lmy)/r+dis(lmx,lmy,dx,dy)/q;
    28 }
    29 int main() {
    30     ax=read(),ay=read(),bx=read(),by=read();
    31     cx=read(),cy=read(),dx=read(),dy=read();
    32     p=read(),q=read(),r=read();
    33     double lx=ax,ly=ay,rx=bx,ry=by;
    34     double lmx,lmy,rmx,rmy,t1,t2;
    35     while(fabs(lx-rx)>eps||fabs(ly-ry)>eps) {
    36         lmx=lx+(rx-lx)/3,lmy=ly+(ry-ly)/3;
    37         rmx=lx+(rx-lx)/3*2,rmy=ly+(ry-ly)/3*2;
    38         t1=cal(lmx,lmy),t2=cal(rmx,rmy);
    39         if(t1>t2) lx=lmx,ly=lmy;
    40         else rx=rmx,ry=rmy;
    41     }
    42     printf("%.2f
    ",cal(lx,ly));
    43     return 0;
    44 }
  • 相关阅读:
    【mongoDB】mongoDB设置权限登陆,并且在keystonejs中创建新的数据路连接实例
    【mongoDB】mongoDb设置权限配置
    【CSS】css改变select选择框的样式
    【原生js】js动态添加dom,如何绑定事件
    【原生js】原生js实现验证码短信发送倒计时
    【jQuery、原生】键盘键入两位小数
    web前端入门
    【原生js】原生js的省市区三级联动
    vue2
    js profiler
  • 原文地址:https://www.cnblogs.com/Willendless/p/9508334.html
Copyright © 2011-2022 走看看