bzoj1857 三分法 傳送帶

2021-08-18 09:54:45 字數 1801 閱讀 1230

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

題解

對於一條線段,設他的開始點為a,結束點為b

設列舉了乙個點u,暫時不看另外一條線段,直接設他到d點

那麼通過點u到達d的時間其實就是線段au和線段ud,分別除速度

然後意會一下,在u逐漸遠離a的過程中,au會增大而ud會減小,除以速度後其實是乙個二次函式,那麼這是有頂點的嘛,所以我們三分

那另一條線段怎麼處理呢?也是一樣啊,對於我們第一條線段三分出來的答案,我們第二條線段三分最優點與之配對。所以就是三分套三分啦

**可讀性 應該還是有的

#include

#include

#include

#include

#include

using

namespace

std;

const

double eps=1e-4;

double ans=0.0,p,q,r;

double ax,ay,bx,by,cx,cy,dx,dy;

double k[2],b[2];

void gt(double x1,double y1,double x2,double y2,int op)

double sqr(double u)

double dis(double x1,double y1,double x2,double y2)

double fd(double x1,double y1,double u)

double fda(double x1,double y1,double v)

double fdsum(double u)

return fd(u,v,ll);

}else

return fda(u,v,ll);

}}double check(double v)

return fd(u,v,ll);

}else

return fda(u,v,ll);

}}int main()

printf("%.2lf\n",check(l));

}else

printf("%.2lf\n",fdsum(l));

}return

0;}

bzoj1857 傳送帶 三分

很早看到的三分法,竟然在今天用到了 顯然已我的智商是想不到的 然而發現自己並不會證明o o,但是除了最關鍵的一步其它還是會的 首先,我們用三分法,最基本的是要證明那個人一定是沿著如下路徑走的 從a沿著ab走一段,再穿越到cd上某一點,最後到終點。證明如下 不妨假設p q r,因為當r max p,q...

BZOJ1857 傳送帶(三分)

在乙個2維平面上有兩條傳送帶,每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段ab和線段cd。lxhgww在ab上的移動速度為p,在cd上的移動速度為q,在平面上的移動速度r。現在lxhgww想從a點走到d點,他想知道最少需要走多長時間 輸入資料第一行是4個整數,表示a和b的座標,分別為ax,a...

bzoj1857 傳送帶 三分套三分

我的第一道三分題目。早上跟著cyc學了一下三分,晚上想練一下手發現沒什麼水題就找到了這一道2333 主要是證明是乙個單峰函式,這也是本題最難的部分 網上好多人寫出來但不會證明 證明過程來自yyl dalao 本題要討論必使r從a點出發,要使解最優,必定要走a e f d,其中e是ab上一點,f為cd...