题目描述

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

题解

首先要吐槽一下数据,不。。应该是我sadiao了。。。qwq没有想到有两个点重合在一起就炸掉的情况。
很多人都用了SA过的,但是三分更好写,个人感觉。
非常容易可以得出,我们的答案分成3个部分,在线段ab,平面内和线段cd上。
\[ans=min(\frac{dis(a,b)}{p}+\frac{dis(e,f)}{q}+\frac{dis(f,d)}{r})\]
以上式子中的e和f就是在线段ab和线段cd上的某一个点,这个答案就是最小的。
首先,很多人好像不知道怎么三分,其实比较简单,将线段x和y坐标都三等分。。
将e这个点当做一个定点,这样可以三分出e当前的最优的f点的答案。再对e三分。
三分套三分,代码还算简单。细节需要注意一下。

代码

#include <bits/stdc++.h>
#define ll long long
#define ms(a, b) memset(a, b, sizeof(a))
#define inf 0x3f3f3f3f
#define db double
using namespace std;
const double eps = 1e-8;
db ax, ay, bx, by, cx, cy, dx, dy, p, q, r;
template <typename T>
T sqr(T x) {
    return x * x;
}
db dist(db x1, db y1, db x2, db y2) {
    return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}
db calc(db x, db y) {
    db lx = cx, ly = cy, rx = dx, ry = dy;
    while (dist(lx, ly, rx, ry) > eps) {
        db Dx = (rx - lx) / 3.0, Dy = (ry - ly) / 3.0;
        db midlx = lx + Dx, midly = ly + Dy, midrx = rx - Dx, midry = ry - Dy;
        db tmp1 = (dist(x, y, midlx, midly) / r) + (dist(dx, dy, midlx, midly) / q), tmp2 = (dist(x, y, midrx, midry) / r) + (dist(dx, dy, midrx, midry) / q);
        if (tmp2 - tmp1 > eps) rx = midrx, ry = midry;
        else lx = midlx, ly = midly;
    }
    return (dist(x, y, lx, ly) / r) + (dist(dx, dy, lx, ly) / q);
}
int main() {
    scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf", &ax, &ay, &bx, &by, &cx, &cy, &dx, &dy, &p, &q, &r);
    db lx = ax, ly = ay, rx = bx, ry = by;
    while (dist(lx, ly, rx, ry) > eps) {
        db Dx = (rx - lx) / 3.0, Dy = (ry - ly) / 3.0;
        db midlx = lx + Dx, midly = ly + Dy, midrx = rx - Dx, midry = ry - Dy;
        db tmp1 = calc(midlx, midly) + (dist(ax, ay, midlx, midly) / p), tmp2 = calc(midrx, midry) + (dist(ax, ay, midrx, midry) / p);
        if (tmp2 - tmp1 > eps) rx = midrx, ry = midry;
        else lx = midlx, ly = midly;
    }
    printf("%.2lf\n", calc(lx, ly) + dist(ax, ay, lx, ly) / p);
    return 0;
}

[luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】的更多相关文章

  1. 【BZOJ1857】[Scoi2010]传送带 三分套三分

    [BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...

  2. 2018.06.30 BZOJ1857: [Scoi2010]传送带(三分套三分)

    1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...

  3. bzoj1857: [Scoi2010]传送带--三分套三分

    三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...

  4. 【BZOJ-1857】传送带 三分套三分

    1857: [Scoi2010]传送带 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 1077  Solved: 575[Submit][Status][ ...

  5. Bzoj 1857: [Scoi2010]传送带(三分套三分)

    1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...

  6. 【BZOJ1857】传送带(分治经典:三分套三分)

    点此看题面 大致题意: 一个二维平面上有两条传送带\(AB\)和\(CD\),\(AB\)传送带的移动速度为\(P\),\(CD\)传送带的移动速度为\(Q\),步行速度为\(R\),问你从\(A\) ...

  7. BZOJ 1857 传送带 (三分套三分)

    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...

  8. 三分套三分 --- HDU 3400 Line belt

    Line belt Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3400 Mean: 给出两条平行的线段AB, CD,然后一 ...

  9. loj10017. 「一本通 1.2 练习 4」传送带(三分套三分)

    题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...

随机推荐

  1. anaconda 出现add 。。。进不去

    找到.condarc 文件  C:\Users\leiyi内 把里面内容替换为 channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk ...

  2. Django之事务

    Django之事务 事务就是将一组操作捆绑在一起,只有当这一组操作全部都成功以后这个事务才算成功;当这组操作中有任何一个没有操作成功,则这个操作就会回滚,回到操作之前的状态. 其中牵扯到向数据库中写数 ...

  3. SQL not exist out join

    sql中exists,not exists的用法 - 飞翔-方向 积累 沉淀 - 博客园http://www.cnblogs.com/mytechblog/articles/2105785.html ...

  4. MySQL数据库性能优化思路与解决方法(一转)

     1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越 小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设 ...

  5. 通过 MySQL 存储原理来分析排序和锁(转)

    先抛出几个问题 为什么不建议使用订单号作为主键? 为什么要在需要排序的字段上加索引? for update 的记录不存在会导致锁住全表? redolog 和 binlog 有什么区别? MySQL 如 ...

  6. mysql数据库,安装 !创建!...详解!

    package cn.jiayou; /* 一.mysql? a.MySQL是Web世界中使用最广泛的数据库服务器. SQLite的特点? 1.是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应 ...

  7. 解析xml文件 selectSingleNode取不到节点

    今天在做批量生成XML的时候,碰到一个情况 解析xml文件 selectSingleNode一直返回NULL. XML的格式开头有一句这个<CE401Message xmlns="ht ...

  8. Sql server 系统表

    sql server系统表详细说明 SQL Server 用户库中系统表说明 名称 说明 备注 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.   sys ...

  9. Vuex的API文档

    前面的话 本文将详细介绍Vuex的API文档 概述 import Vuex from 'vuex' const store = new Vuex.Store({ ...options }) [构造器选 ...

  10. Zero to Build: Create new Xamarin apps in minutes with AppMap

    Creating a new Xamarin.Forms app can be an intimidating task, especially if you add in content pages ...