Description

传送门

Solution

三分套三分。代码简单但是证明苦兮兮。。

假如我们在AB上选了一个点G,求到该点到D的最小时间。

图中b与CD垂直。设目前从G到D所耗时间最短的路径为G->E->D,可知E绝对不会在F右侧。

设函数f(a)=GE+ED-FD=sqrt(a^2+b^2)/r-a/q,我们要证它是单峰的。

设1/r=x,1/q=y。

则GE+ED-FD=x*sqrt(a^2+b^2)-ay。

1,如果x<y,最优方案必定为E与D重合,显然;

2,如果x>y,设y=kx(k<1)。

 则GE+ED-FD=x*sqrt(a^2+b^2)-akx=x*(sqrt(a^2+b^2)-ak)。

 sqrt(a^2+b^2)的上升趋势会越来越快(因为随着a的增加,该式受b^2影响越小),而ak的函数解析式是一条直线,故f(a)是单峰的。

可能讲的有点玄学可以用几何画板画一下哈哈。

接下来我们探讨G的选择。x,y还是按照上面的定义。g(AG)=A->G->E->D的时间,现在我们要证明g是单峰的。假如x<y:

如图,证明显然。

假如x>y:

GF1//CD,可知g(AG1)-g(AG)=(GG1)/p+(G1F1)/r-(GF1)/q。又因为三角形三边成比例,则在G2之前的g(AG)必定是向上或者向下的。

设点G'使得G'D垂直于AB,如果G2在G'前面:

考虑G2G'(G'图中未标出),若先前的g是下降的,则在这一段的g必定也是下降的。反之如图:

然后。。然后就证不下去了。。。

如果有大佬知道的话还请不吝赐教,我必万分感激!

Code

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. using namespace std;
  6. int p,q,rr;
  7. struct P{double x,y;
  8. friend P operator+(P x,P y){return P{x.x+y.x,y.y+x.y};}
  9. friend P operator/(P x,double y){return P{x.x/y,x.y/y};}
  10. }a,b,c,d,l,r,mid1,mid2;
  11. double dis(P x,P y){return sqrt((x.x-y.x)*(x.x-y.x)+(y.y-x.y)*(y.y-x.y));}
  12. double solve(P x)
  13. {
  14. P L,R,Mid1,Mid2;
  15. L=c;R=d;
  16. while (dis(L,R)>1e-)
  17. {
  18. Mid1=(L+L+R)/3.0;Mid2=(L+R+R)/3.0;
  19. if (dis(x,Mid1)/rr+dis(Mid1,d)/q<dis(x,Mid2)/rr+dis(Mid2,d)/q)
  20. R=Mid2;else L=Mid1;
  21. }
  22. return dis(x,L)/rr+dis(L,d)/q;
  23. }
  24. double ans;
  25. int main()
  26. {
  27. scanf("%lf%lf%lf%lf%lf%lf%lf%lf%d%d%d",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y,&p,&q,&rr);
  28. l=a;r=b;
  29. while (dis(r,l)>1e-)
  30. {
  31. mid1=(l+l+r)/3.0;mid2=(r+r+l)/3.0;
  32. if (solve(mid1)+dis(a,mid1)/p<solve(mid2)+dis(a,mid2)/p) r=mid2;else l=mid1;
  33. }
  34. printf("%.2f",dis(a,l)/p+solve(l));
  35. }

[BZOJ1857][SCOI2010]传送带-[三分]的更多相关文章

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

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

  2. BZOJ1857 Scoi2010 传送带 【三分】

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

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

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

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

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

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

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

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

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

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

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

  8. 洛谷P2571 [SCOI2010]传送带 [三分]

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

  9. BZOJ1857 [Scoi2010]传送带 【三分法】

    题目链接 BZOJ1857 题解 画画图就发现实际上是在\(AB\)上和\(CD\)上分别选两个点\(E\),\(F\),使得\(t_{AE} + t_{EF} + t_{FD}\)最小 然后猜想到当 ...

随机推荐

  1. js实现点击按钮显示某个区域 然后点击页面中任意其他位置,隐藏该区域

    $(".licat-header-list").on("click",function(e){ $(this).addClass("active&qu ...

  2. CATransaction:原子化操作、批量操作、整体设置、自动添加

    Transactions are CoreAnimation's mechanism for batching multiple layer- tree operations into atomic ...

  3. BZOJ1058:[ZJOI2007]报表统计(Splay,堆)

    Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...

  4. Mysql 用户权限管理--从 xxx command denied to user xxx

    今天遇到一个mysql 权限的问题,即标题所述  xxx command denied to user xxx,一般mysql 这种报错,基本都属于当前用户没有进行该操作的权限,需要 root 用户授 ...

  5. cocos2d-x中关于打包成APK的问题

    转载自:http://blog.csdn.net/u013315178/article/details/51254630 之前在网上看了很多的帖子大多数用ide 来打包 太麻烦了 而且一般没有人现场指 ...

  6. 3、Spring Cloud - Eureka(高可用Eureka Server集群)

    在实际的项目中,可能有几十个或者几百个的微服务实例,这时 Eureka Server 承担了非 常高的负载.由于 Eureka Server 在微服务架构中有着举足重轻的作用,所以需要对 Eureka ...

  7. Unity3D-射线效果

    基于airplane_02 下面新建 Line Renderer 将上面的几个地方设置下 添加Script脚本: 脚本代码为: using System.Collections; using Syst ...

  8. 提交json串格式的POST请求

    提交json串格式的POST请求 Action() { web_reg_save_param("retCode", "LB=retCode\":\"& ...

  9. i2c 通信

    时间长了记忆就会模糊, 保存下逻辑分析抓到的图像, 什么时候需要可以看一眼. 当clk处于高电平时, data线有下降,说明开始传输, 有上升说明结束传输. 发送地址无回应: 发送地址有回应 正常数据 ...

  10. windows设置控制台编码格式为UTF-8

    1.运行CMD 2.输入CHCP查看当前编码格式. 3.输入 CHCP 65001设置编码方式为UTF-8 注意,到此处并没有完全修改,只是修改了当前页面,怎么完全修改? 4.右击控制台,选择属性: ...