bzoj1857 傳送帶 三分套三分

2022-05-20 08:32:12 字數 1095 閱讀 2340

我的第一道三分題目。

早上跟著cyc學了一下三分,晚上想練一下手發現沒什麼水題就找到了這一道2333

主要是證明是乙個單峰函式,這也是本題最難的部分(網上好多人寫出來但不會證明:))

證明過程來自yyl dalao:

本題要討論必使r從a點出發,要使解最優,必定要走a->e->f->d,其中e是ab上一點,f為cd上一點。

因為e和f都是不確定的,我們不妨假設e點已經確定,那麼cd上必定存在一點f使得ef和fd最優(先不考慮ae),那麼也容易理解,離f點越近的點越優,也就是乙個單峰函式啦,可以三分。

那麼再考慮e點,反過來說ab上必定存在乙個e使得解最優(不然題目要算什麼),那麼離這個點越近也越優,同樣是單峰,還是三分。

對於ab上三分得到的兩點e1和e2,都有各自在cd上對應的最優點f,此時算出各自的最優解進行比較,所用時間分別為t1,t2,若t1>t2,說明e2離最優解更近,lx=x1,ly=y1;反之則rx=x2,ry=y2。

接著就是三分套三分啦,實現起來不難,具體細節看**。

#include#include

#include

#include

#include

#include

#define eps 1e-3

using

namespace

std;

struct

point

a,b,c,d;

intp,q,r;

double dis(double x1,double y1,double x2,double

y2)double cal(double x,double

y)

return ab+dis(lx,ly,x,y)/r+dis(d.x,d.y,lx,ly)/q;

}int

read()

while(ch>='

0'&&ch<='9')

return x*f;

}int

main()

printf(

"%.2lf

",cal(lx,ly));

return0;

}

view code

BZOJ 1857 傳送帶 三分套三分

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

BZOJ 1857 傳送帶 三分套三分

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

bzoj1857 傳送帶 三分

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