[BZOJ1857][SCOI2010]传送带-[三分]
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
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- using namespace std;
- int p,q,rr;
- struct P{double x,y;
- friend P operator+(P x,P y){return P{x.x+y.x,y.y+x.y};}
- friend P operator/(P x,double y){return P{x.x/y,x.y/y};}
- }a,b,c,d,l,r,mid1,mid2;
- double dis(P x,P y){return sqrt((x.x-y.x)*(x.x-y.x)+(y.y-x.y)*(y.y-x.y));}
- double solve(P x)
- {
- P L,R,Mid1,Mid2;
- L=c;R=d;
- while (dis(L,R)>1e-)
- {
- Mid1=(L+L+R)/3.0;Mid2=(L+R+R)/3.0;
- if (dis(x,Mid1)/rr+dis(Mid1,d)/q<dis(x,Mid2)/rr+dis(Mid2,d)/q)
- R=Mid2;else L=Mid1;
- }
- return dis(x,L)/rr+dis(L,d)/q;
- }
- double ans;
- int main()
- {
- 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);
- l=a;r=b;
- while (dis(r,l)>1e-)
- {
- mid1=(l+l+r)/3.0;mid2=(r+r+l)/3.0;
- if (solve(mid1)+dis(a,mid1)/p<solve(mid2)+dis(a,mid2)/p) r=mid2;else l=mid1;
- }
- printf("%.2f",dis(a,l)/p+solve(l));
- }
[BZOJ1857][SCOI2010]传送带-[三分]的更多相关文章
- bzoj1857: [Scoi2010]传送带--三分套三分
三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...
- BZOJ1857 Scoi2010 传送带 【三分】
BZOJ1857 Scoi2010 传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P ...
- 【BZOJ1857】[Scoi2010]传送带 三分套三分
[BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...
- 2018.06.30 BZOJ1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- 【BZOJ-1857】传送带 三分套三分
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1077 Solved: 575[Submit][Status][ ...
- bzoj 1857: [Scoi2010]传送带 三分
题目链接 1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 934 Solved: 501[Submit][Stat ...
- Bzoj 1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- 洛谷P2571 [SCOI2010]传送带 [三分]
题目传送门 传送带 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移 ...
- BZOJ1857 [Scoi2010]传送带 【三分法】
题目链接 BZOJ1857 题解 画画图就发现实际上是在\(AB\)上和\(CD\)上分别选两个点\(E\),\(F\),使得\(t_{AE} + t_{EF} + t_{FD}\)最小 然后猜想到当 ...
随机推荐
- js实现点击按钮显示某个区域 然后点击页面中任意其他位置,隐藏该区域
$(".licat-header-list").on("click",function(e){ $(this).addClass("active&qu ...
- CATransaction:原子化操作、批量操作、整体设置、自动添加
Transactions are CoreAnimation's mechanism for batching multiple layer- tree operations into atomic ...
- BZOJ1058:[ZJOI2007]报表统计(Splay,堆)
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- Mysql 用户权限管理--从 xxx command denied to user xxx
今天遇到一个mysql 权限的问题,即标题所述 xxx command denied to user xxx,一般mysql 这种报错,基本都属于当前用户没有进行该操作的权限,需要 root 用户授 ...
- cocos2d-x中关于打包成APK的问题
转载自:http://blog.csdn.net/u013315178/article/details/51254630 之前在网上看了很多的帖子大多数用ide 来打包 太麻烦了 而且一般没有人现场指 ...
- 3、Spring Cloud - Eureka(高可用Eureka Server集群)
在实际的项目中,可能有几十个或者几百个的微服务实例,这时 Eureka Server 承担了非 常高的负载.由于 Eureka Server 在微服务架构中有着举足重轻的作用,所以需要对 Eureka ...
- Unity3D-射线效果
基于airplane_02 下面新建 Line Renderer 将上面的几个地方设置下 添加Script脚本: 脚本代码为: using System.Collections; using Syst ...
- 提交json串格式的POST请求
提交json串格式的POST请求 Action() { web_reg_save_param("retCode", "LB=retCode\":\"& ...
- i2c 通信
时间长了记忆就会模糊, 保存下逻辑分析抓到的图像, 什么时候需要可以看一眼. 当clk处于高电平时, data线有下降,说明开始传输, 有上升说明结束传输. 发送地址无回应: 发送地址有回应 正常数据 ...
- windows设置控制台编码格式为UTF-8
1.运行CMD 2.输入CHCP查看当前编码格式. 3.输入 CHCP 65001设置编码方式为UTF-8 注意,到此处并没有完全修改,只是修改了当前页面,怎么完全修改? 4.右击控制台,选择属性: ...