@(BZOJ)[三分法]

Description

在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。

两条传送带分别为线段AB和线段CD。

lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。

现在lxhgww想从A点走到D点,他想知道最少需要走多长时间。

Input

输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By。

第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy。

第三行是3个整数,分别是P,Q,R。

Output

输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位

Sample Input

0 0 0 100
100 0 100 100
2 2 1

Sample Output

136.60

HINT

对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000

1<=P,Q,R<=10

Solution

三分套三分.

就當是練一下手吧.

#include<cstdio>
#include<cmath>
#include<ctime>
#define hKReporter main
using namespace std; struct vertex
{
double x, y; inline void getInput()
{
scanf("%lf%lf", &x, &y);
}
}a, b, c, d; double p, q, r; inline double getThatJunk(double x1, double y1, double x2, double y2)
{
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
} inline double getDistance(double pro1,double pro2)
{
double x1, y1, x2, y2;
x1 = a.x + (b.x - a.x) * pro1, y1 = a.y + (b.y - a.y) * pro1;
x2 = c.x + (d.x - c.x) * pro2, y2 = c.y + (d.y - c.y) * pro2;
return getThatJunk(a.x, a.y, x1, y1) / p + getThatJunk(x1, y1, x2, y2) / r + getThatJunk(x2, y2, d.x, d.y)/q;
} double get(double x)
{
double L = 0, R = 1; for(int i = 0; i < 1 << 10; i ++)
{
double mid1 = L + (R - L) / 3, mid2 = L + (R - L) / 3 * 2;
double k1 = getDistance(x, mid1), k2 = getDistance(x, mid2); if(k1 < k2)
R = mid2;
else
L = mid1;
} return getDistance(x, L);
} int hKReporter()
{
#ifndef ONLINE_JUDGE
freopen("BZOJ1857.in", "r", stdin);
freopen("BZOJ1857.out", "w", stdout); // Sleep(1);
#endif a.getInput(), b.getInput(), c.getInput(), d.getInput();
scanf("%lf%lf%lf", &p, &q, &r); double L = 0, R = 1; for(int i = 0; i < 1 << 10; i ++)
{
double mid1 = L + (R - L) / 3, mid2 = L + (R - L) / 3 * 2;
double k1 = get(mid1), k2 = get(mid2); if(k1 < k2)
R = mid2;
else
L = mid1;
} printf("%.2lf", get(L));
}

BZOJ 2131 [scoi2010] 传送带的更多相关文章

  1. BZOJ 1857: [Scoi2010]传送带

    二次联通门 : BZOJ 1857: [Scoi2010]传送带 /* BZOJ 1857: [Scoi2010]传送带 三分套三分 可能是吧..dalao们都说明显是一个单峰函数 可是我证不出来.. ...

  2. bzoj 1857: [Scoi2010]传送带 三分

    题目链接 1857: [Scoi2010]传送带 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 934  Solved: 501[Submit][Stat ...

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

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

  4. BZOJ 1857: [Scoi2010]传送带(三分套三分)

    Time Limit: 1 Sec Memory Limit: 64 MB Submit: 2549 Solved: 1370 [Submit][Status][Discuss] Descriptio ...

  5. P2571 [SCOI2010]传送带

    P2571 [SCOI2010]传送带 三分套三分. 前提条件:P3382 [模板]三分法 三分,求区间内单峰函数的最大/最小值. 我们把两条线段都跑三分,先ab后cd,求出最小值. 可以直接将二维坐 ...

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

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

  7. [SCOI2010]传送带 三分法

    [SCOI2010]传送带 LG传送门 三分法模板. 关于为什么可以三分,我选择感性理解,有人证明了,总之我是懒得证了. 假设路径是\(A \to E \to F \to D\),\(E\)和\(F\ ...

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

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

  9. BZOJ1857 Scoi2010 传送带 【三分】

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

随机推荐

  1. 数学基础:HUD1406-完数

    完数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Descript ...

  2. 算法导论 第七章 快速排序(python)

    用的最多的排序 平均性能:O(nlogn){随机化nlogn} 原地址排序 稳定性:不稳定 思想:分治 (切分左右) 学习方式:自己在纸上走一遍   def PARTITION(A,p,r): x = ...

  3. InnoDB Redo Flush及脏页刷新机制深入分析

    概要: 我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓 ...

  4. meta-data

    <meta-data android:name="string"   android:resource="resource specification"  ...

  5. LoadRunner11使用方法以及注意点收集

    一:安装loadrunner http://jingyan.baidu.com/article/f7ff0bfc1cc82c2e26bb13b7.html http://www.cnblogs.com ...

  6. 1.ABP使用boilerplate模版创建解决方案

    1.到ABP框架的官网(http://www.aspnetboilerplate.com/),自动生成一个解决方案 每步注解: 第一步:AngularJS是一款比较火的SPA(Single Page ...

  7. Codeforces 891 C Envy

    题目大意 给定一个 $n$ 个点 $m$ 条边的连通的无向图,每条边有一个权值,可能有重边.给出 $q$ 组询问,一组询问给出 $k$ 条边,问是否存在一棵最小生成树包含这 $k$ 条边. 思路 这道 ...

  8. [luoguP2766] 最长递增子序列问题(最大流)

    传送门 题解来自网络流24题: [问题分析] 第一问时LIS,动态规划求解,第二问和第三问用网络最大流解决. [建模方法] 首先动态规划求出F[i],表示以第i位为开头的最长上升序列的长度,求出最长上 ...

  9. LibreOJ2095 - 「CQOI2015」选数

    Portal Description 给出\(n,k,L,R(\leq10^9)\),求从\([L,R]\)中选出\(n\)个可相同有顺序的数使得其gcd为\(k\)的方案数. Solution 记\ ...

  10. maven项目中配置mvn源

    在pom.xml中配置 <repositories> <!--for others--> <repository> <id>alimaven</i ...