bzoj1857 傳送帶 三分

2021-07-09 07:41:37 字數 1211 閱讀 7144

很早看到的三分法,竟然在今天用到了(顯然已我的智商是想不到的)。然而發現自己並不會證明o(╯□╰)o,但是除了最關鍵的一步其它還是會的》_

首先,我們用三分法,最基本的是要證明那個人一定是沿著如下路徑走的:從a沿著ab走一段,再穿越到cd上某一點,最後到終點。證明如下:不妨假設p>q>r,因為當r>max(p,q)時沒什麼好討論的,而p,q的大小沒什麼關係。那麼假設這人從ab上一點x離開,那麼如果它不沿著剛剛的路徑,則它一定會沿著某個路徑回到ab上一點y,顯然x->y的最快方法是沿著ab走,因為這樣距離最短而速度最快。證完。

當s>=q時,顯然時間隨著cy的增大而減小,顯然是單峰函式,因此不妨設ss,所以該式最終會變為負數並且一定會越變越小,時間不斷增大。綜上所述:時間先單調遞減再單調遞增,證完。

然而我並不會證明從ab上一點x離開的最優時間,這個函式與ax成單峰函式關係。。。算了先挖個坑,誰會請告訴我》_

#include#include#include#include#include#define eps 1e-3

using namespace std;

int ax,bx,cx,dx,ay,by,cy,dy,p,q,r;

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

double solve(double u,double v){

double lx=cx,ly=cy,rx=dx,ry=dy,x1,x2,y1,y2,t1,t2;

while (abs(lx-rx)>eps || abs(ly-ry)>eps){

x1=(lx+lx+rx)/3; x2=(x1+rx)/2; y1=(ly+ly+ry)/3; y2=(y1+ry)/2;

t1=dist(x1,y1,dx,dy)/q+dist(x1,y1,u,v)/r;

t2=dist(x2,y2,dx,dy)/q+dist(x2,y2,u,v)/r;

if (t1eps || abs(ly-ry)>eps){

x1=(lx+lx+rx)/3; x2=(x1+rx)/2; y1=(ly+ly+ry)/3; y2=(y1+ry)/2;

if (solve(x1,y1)

by lych

2016.1.5

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...

BZOJ 1857 傳送帶 三分套三分

time limit 1 sec memory limit 64 mb submit 1077 solved 575 submit status discuss 在乙個2維平面上有兩條傳送帶,每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段ab和線段cd。lxhgww在ab上的移動速度為p,在c...