1857: [Scoi2010]传送带

Time Limit: 1 Sec Memory Limit: 64 MB

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

Source

Day2

  1. /*
  2. 三分套三分.
  3. 比较显然的凸形函数.
  4. 凸性函数套凸性函数应该还是凸性函数吧....
  5. 不会证明.
  6. 别忘了讨论斜率为0的情况....
  7. */
  8. #include<iostream>
  9. #include<cstdio>
  10. #include<cmath>
  11. #define MAXN 10001
  12. #define eps 1e-9
  13. using namespace std;
  14. double ax,ay,bx,by,cx,cy,dx,dy,P,Q,R,ans;
  15. double Cola(double x1,double y1,double x2,double y2)
  16. {
  17. return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  18. }
  19. double sanfenfuben2(double x,double y)//CD无斜率.
  20. {
  21. double mid,midmid,k,t1,t2,l,r;
  22. l=min(cy,dy),r=max(cy,dy);
  23. while(l+eps<r)
  24. {
  25. mid=(2*l+r)/3,midmid=(l+2*r)/3;
  26. t1=Cola(cx,mid,dx,dy)/Q+Cola(cx,mid,x,y)/R;
  27. t2=Cola(cx,midmid,dx,dy)/Q+Cola(cx,midmid,x,y)/R;
  28. if(t1<t2) r=midmid;
  29. else l=mid;
  30. }
  31. t1=Cola(cx,l,dx,dy)/Q+Cola(cx,l,x,y)/R;
  32. return t1;
  33. }
  34. double sanfen2(double x,double y)//CD有斜率.
  35. {
  36. if(cx==dx) return sanfenfuben2(x,y);
  37. double mid,midmid,k,t1,t2,l,r,b;
  38. l=min(cx,dx),r=max(cx,dx);
  39. k=(cy-dy)/(cx-dx);
  40. b=cy-k*cx;
  41. while(l+eps<r)
  42. {
  43. mid=(2*l+r)/3,midmid=(l+2*r)/3;
  44. t1=Cola(mid,mid*k+b,dx,dy)/Q+Cola(mid,mid*k+b,x,y)/R;
  45. t2=Cola(midmid,midmid*k+b,dx,dy)/Q+Cola(midmid,midmid*k+b,x,y)/R;
  46. if(t1<t2) r=midmid;
  47. else l=mid;
  48. }
  49. t1=Cola(l,l*k+b,dx,dy)/Q+Cola(l,l*k+b,x,y)/R;
  50. return t1;
  51. }
  52. void sanfen1()//AB有斜率.
  53. {
  54. double mid,midmid,k,t1,t2,l,r,b;
  55. l=min(ax,bx),r=max(ax,bx);
  56. k=(ay-by)/(ax-bx);
  57. b=ay-k*ax;
  58. while(l+eps<r)
  59. {
  60. mid=(2*l+r)/3,midmid=(l+2*r)/3;
  61. t1=sanfen2(mid,k*mid+b)+Cola(mid,mid*k+b,ax,ay)/P;//+Cola(mid,mid*k,dx,dy)/R;
  62. t2=sanfen2(midmid,midmid*k+b)+Cola(midmid,midmid*k+b,ax,ay)/P;//+Cola(midmid,midmid*k,dx,dy)/R;
  63. if(t1<t2) r=midmid;
  64. else l=mid;
  65. }
  66. t1=sanfen2(l,l*k+b)+Cola(l,l*k+b,ax,ay)/P;
  67. ans=min(ans,t1);
  68. }
  69. void sanfenfuben1()//AB无斜率.
  70. {
  71. double mid,midmid,k,t1,t2,l,r;
  72. l=min(ay,by),r=max(ay,by);
  73. while(l+eps<r)
  74. {
  75. mid=(2*l+r)/3,midmid=(l+2*r)/3;
  76. t1=sanfen2(ax,mid)+Cola(ax,mid,ax,ay)/P;//+Cola(mid,mid*k,dx,dy)/R;
  77. t2=sanfen2(ax,midmid)+Cola(ax,midmid,ax,ay)/P;//+Cola(midmid,midmid*k,dx,dy)/R;
  78. if(t1<t2) r=midmid;
  79. else l=mid;
  80. }
  81. t1=sanfen2(ax,l)+Cola(ax,l,ax,ay)/P;
  82. ans=min(ans,t1);
  83. }
  84. int main()
  85. {
  86. freopen("walk.in","r",stdin);
  87. freopen("walk.out","w",stdout);
  88. cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy;
  89. cin>>P>>Q>>R;
  90. ans=Cola(ax,ay,dx,dy)/R;
  91. if(ax!=bx) sanfen1();
  92. else sanfenfuben1();
  93. printf("%.2lf",ans);
  94. return 0;
  95. }

Bzoj 1857: [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]传送带(三分套三分)

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

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

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

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

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

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

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

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

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

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

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

  9. [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】

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

随机推荐

  1. Java的表达式和运算符

    一.算术运算符 运算符 + - * / % 说明 加 减 乘 除 取模(余数) 例子 1+2 5-3 20*5 6/4 30%9 结果 3 2 100 1 3 int x = 10; int y = ...

  2. SQL server数据库创建代码,filegroup文件组修改,

    以下示例在 SQL Server 实例上创建了一个数据库.该数据库包括一个主数据文件.一个用户定义文件组和一个日志文件.主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件.ALTER DAT ...

  3. NuGet包 安装相关指令

    一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安装到指定的项目install-package <程序包名& ...

  4. mybatis映射mapper文件做like模糊查询

    方法:使用concat函数连接通配符

  5. Shadowmap简易实现

    之前一直没有自己实现过阴影,只是概念上有所了解,这次通过Demo进行实际编写操作. 总的来说没有什么可以优化的,倒是对于窗户这种可用面片代替的物体似乎能优化到贴图上,之前arm有个象棋屋的demo做过 ...

  6. Spring Security 解析(五) —— Spring Security Oauth2 开发

    Spring Security 解析(五) -- Spring Security Oauth2 开发   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决 ...

  7. jQuery简易Ajax(六)

    一.jQuery中ajax的两种书写方式[一般采用第二种方式]1.$.ajax(url,[setting]); 2.$.ajax([setting]); setting参数说明:setting为一个对 ...

  8. javascript中的vavigator对象

    appCodeName javaScript 1.0 介绍:与浏览器相关的内部代码名 appMinorVersion IE4及其后续的版本 介绍:辅版本号(通常应用于浏览器的补丁或服务包) appNa ...

  9. 《JavaScript高级程序设计》笔记:附录A ECMAScript Harmony

    一般性变化 常量 用const关键字声明常量,声明的变量在初始赋值后,就不能进行修改了,如下代码: const MAX_SIZE = 25; MAX_SIZE = 10; //报错 块级作用域及其他作 ...

  10. Js基本语句

    js基本语句整理导向图 ---欢迎收藏^ - ^