很早看到的三分法,竟然在今天用到了(顯然已我的智商是想不到的)。然而發現自己並不會證明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...