[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}\)最小 然后猜想到当 ...
随机推荐
- vue 项目搭建笔记1
1.首先安装node.js(傻瓜式安装,安装路径默认C盘) 2.打开node.js command prompt 3.进入想放项目的文件夹.如D: -->回车 4.进入具体文件夹,如cd wo ...
- hdu-3333 Turing Tree 离线区间+树状数组(区间不同数的和)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 题目大意: 给出一数组,以及m个查询区间,每次查询该区间不同数字的和.相同数字只加一次. 解题 ...
- 【vue】todolist小练习
参考链接: http://www.imooc.com/learn/694 http://www.cnblogs.com/Chen-XiaoJun/p/6238137.html http://blog. ...
- .net根据经纬度获取地址(百度api)
private string GetAddress(string lng, string lat) { try { string url = @"http://api.map.baidu.c ...
- CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第二件事就是 LED 驱动 ,点个灯
/* * board_led.c * * Created on: 2018年7月3日 * Author: admin */ #include "board_uart.h" #inc ...
- redis集群环境搭建的错误
安装redis集群需要版本号在3.0以上 redis-cluster安装前需要安装ruby环境 搭建集群需要使用到官方提供的ruby脚本. 需要安装ruby的环境. yum -y install ru ...
- linux查看nginx、apache、php、php-fpm、mysql及配置项所在目录
可以先总结下:大都是先用 which 获取目录:然后再获取配置项位置: which mysql /usr/bin/mysql /usr/bin/mysql --help | grep -A1 'De ...
- win7在安装时跳过输入用户名界面,直接开启管理员用户
WIN7原版系统安装完后需要创建用户,为了追求纯净简化不必要的步骤,可以选择跳过创建用户直接启用内置管理员账户.首先,到了创建用户这一步先别急着往下点,此时按键盘的SHIFT + F10 组合键调出命 ...
- es6 入坑笔记(五)
Symbol 主要用做key或私有变量,Symbol是唯一的不可重复的,也是一个单独的数据类型 定义形式: let demo=Symbol("aaaa"); 1.Symbol不能使 ...
- Centos7下python3.7的pipSSLError问题
在Centos7下成功安装了python3.7, 但是在使用pip3的时候出现了以下错误 中间试过了网上大家给出的好多种办法,一开始我只是在编译的时候 ./configure --with-ssl(p ...