Description

题库链接

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

\(1\leq A_x,A_y,B_x,B_y,C_x,C_y,D_x,D_y\leq 1000,1\leq P,Q,R\leq 10\)

Solution

我们大胆猜想不用求证小心求证。我们猜测当我们来枚举在 \(AB\) 上的离开点和 \(CD\) 上的进入点时,是两个单峰函数。

那么直接用三分法求解了。注意要特判线段退化成点的情况。

至于证明,都说了不用求证小心求证。详见链接:->戳我<-

Code

//It is made by Awson on 2018.3.1
#include <bits/stdc++.h>
#define LL long long
#define dob complex<double>
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const double eps = 1e-4;
void read(int &x) {char ch; bool flag = 0;for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());x *= 1-2*flag;
}
void print(int x) {if (x > 9) print(x/10); putchar(x%10+48); }
void write(int x) {if (x < 0) putchar('-'); print(Abs(x)); }double xa, ya, xb, yb, xc, yc, xd, yd, p, q, r, ans;
double e, f, g, h, i, j;double dist(double a, double b, double c, double d) {
#define sqr(x) ((x)*(x))double ans = 0;ans += sqrt(sqr(a-e)+sqr(b-f))/p;ans += sqrt(sqr(a-c)+sqr(b-d))/r;ans += sqrt(sqr(c-g)+sqr(d-h))/q;return ans;
}
double count(double x, double y) {xc = i, yc = j, xd = g, yd = h;double ans = dist(x, y, xd, yd);while (true) {if (fabs(yc-yd) <= eps && fabs(xc-xd) <= eps) break;double xm1 = (xc*2+xd)/3., xm2 = (xc+xd*2)/3.;double ym1 = (yc*2+yd)/3., ym2 = (yc+yd*2)/3.;double c1 = dist(x, y, xm1, ym1), c2 = dist(x, y, xm2, ym2);if (c1 > c2) xc = xm1, yc = ym1, ans = c2; else xd = xm2, yd = ym2, ans = c1;}return ans;
}
void work() {scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf", &xa, &ya, &xb, &yb, &xc, &yc, &xd, &yd, &p, &q, &r);e = xa, f = ya, g = xd, h = yd, i = xc, j = yc; ans = count(xa, ya);while (true) {if (fabs(ya-yb) <= eps && fabs(xa-xb) <= eps) break;double xm1 = (xa*2+xb)/3., xm2 = (xa+xb*2)/3.;double ym1 = (ya*2+yb)/3., ym2 = (ya+yb*2)/3.;double c1 = count(xm1, ym1), c2 = count(xm2, ym2);if (c1 > c2) xa = xm1, ya = ym1, ans = c2; else xb = xm2, yb = ym2, ans = c1;}printf("%.2lf\n", ans);
}
int main() {work(); return 0;
}

转载于:https://www.cnblogs.com/NaVi-Awson/p/8486832.html

[SCOI 2010]传送带相关推荐

  1. DP专练4:[SCOI 2010]股票交易(单调队列优化dp)

    昨天晚上,初见它时,月黑风高,一个电脑,一支笔,一个人 今天秋高气爽,再一瞥,回眸间 我又来了,honey 题目 题解 代码实现 题目 题解 首先这种 iii 天与前面 jjj 天有关联,而且让你求最 ...

  2. [SCOI 2010]字符串

    Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...

  3. #10017 「一本通 1.2 练习 4」传送带+三分套三分

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

  4. 【二分图】洛谷P1640连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  5. [二分图]luogu 1640 连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  6. 简介SharePoint 2010 14 Hive文件夹

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012025054/article/details/36018873 简介SharePoint 20 ...

  7. [BZOJ1857][Scoi2010]传送带

    1857: [Scoi2010]传送带 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1786  Solved: 981 [Submit][Status ...

  8. 在SharePoint 2010使用OWA查看自己邮箱的内容

    在SharePoint 2010使用OWA 背景: 利用 Outlook Web Access Web 部件,可以在 SharePoint 网站中显示从 Microsoft Exchange Serv ...

  9. 将moss 2007的模板文件导入到moss 2010

    最近公司HR请请将一个moss2007的调查模板文件导入到我们部门的Moss protal 上面. 我想这是举手之劳,就爽快的答应了. 但是导入时却报如下错误: Error Microsoft Sha ...

最新文章

  1. Unity3d HDR和Bloom效果(高动态范围图像和泛光)
  2. linux 文件备份定时任务脚本,linux服务器每天执行备份数据库定时任务脚本demo
  3. qt mysql 清空表格_qt删除数据库中的表
  4. bootstrap.yml与application.properties区别?
  5. 荣耀v40搭载鸿蒙吗,荣耀V40照常发布,将更换操作系统,同nova8搭载鸿蒙2.0发布...
  6. uibot css selector定位,UiBot如何使用CSS Selector
  7. 双十一京东PLUS会员 VS 阿里88VIP,谁的羊毛多?
  8. 一篇很好的面试文章 程序员面试IT公司的33个小贴士
  9. Silverlight之OOB模式下的一些事
  10. 科技爱好者周刊:第 91 期
  11. pos机属于计算机系统吗,什么是POS系统
  12. OpenCV安装使用
  13. 快速排序-C语言版(带图详细)
  14. 【LTspice】【LTspice添加第三方***.lib文件】
  15. SCIgen - An Automatic CS Paper Generator
  16. while(true) Thread.Sleep(XX)我通常是用这种写法,有没有更好的写法或者改进
  17. python列表原地交换nums[i], nums[nums[i]] = nums[nums[i]], nums[i]的解决方法
  18. 虚拟机类加载机制(类加载过程)
  19. TVS管 与 稳压二极管参数对比
  20. html表格填充空白单元格,快速填充空白单元格【应对步骤】

热门文章

  1. 使用PXE+NFS EFI引导安装RHEL6/7以及Kickstart安装
  2. Java并发程序设计(八)设计模式与并发之单例模式
  3. P1982 小朋友的数字
  4. linux禁用锁定和解除解锁用户账号的方法
  5. PHP PDO 预处理语句与存储过程
  6. Android JNI简单实例(android 调用C/C++代码)
  7. 搭载鸿蒙处理器的手机,荣耀Magic3被曝光,或采用安卓与鸿蒙双系统,搭载麒麟9000处理器...
  8. cmd上运行java程序遇到的问题(找不到或无法加载主类)
  9. DataWorks 功能实践 — 生产开发环境隔离
  10. 江门农商银行引入阿里云AnalyticDB,实现数据自助分析平台升级