在乙個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位。
顯然是先從ab的某點e出發,然後經過平面到達cd的某點f,然後從f到達d。
我們假設已經確定了e,然後我們確定cd的f時,我們通過直覺感知到隨著點f從c移動到d
時間關於位移的函式影象是乙個先減少後增加的圖形。
我們再來確定e,通過直覺,
時間關於位移的函式影象依然是乙個先減少後增加的圖形。
所以我們先三分e,再三分f,
我們用三分套三分解決了這個問題。
# include # includeview code# include
# include
# include
# include
# include
# include
# include
# include
using
namespace
std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0
)# define maxn
250005
# define eps 1e-3
# define maxm
1000005
# define mod
1000000007
# define inf
1000000000
# define mem(a,b) memset(a,b,
sizeof
(a))
# define for(i,a,n)
for(int i=a; i<=n; ++i)
# define fo(i,a,n)
for(int i=a; ii)
# define bug puts("h
");# define lch p
<<1
,l,mid
# define rch p
<<1|1,mid+1
,r# pragma comment(linker,
"/stack:1024000000,1024000000")
typedef
long
long
ll;typedef unsigned
long
long
ull;
int _max(int a, int b)
int _min(int a, int b)
intscan()
void out(int
a)
if(a>=10) out(a/10
); putchar(a%10+'0'
);}double
ax, ay, bx, by, cx, cy, dx, dy, p, q, r;
double dis(double x1, double y1, double x2, double
y2)double cal(double x, double
y)
return ans+dis(lx,ly,dx,dy)/q+dis(x,y,lx,ly)/r;
}int
main ()
printf(
"%.2lf\n
",cal(lx,ly));
return0;
}
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...
bzoj1857 傳送帶 三分
很早看到的三分法,竟然在今天用到了 顯然已我的智商是想不到的 然而發現自己並不會證明o o,但是除了最關鍵的一步其它還是會的 首先,我們用三分法,最基本的是要證明那個人一定是沿著如下路徑走的 從a沿著ab走一段,再穿越到cd上某一點,最後到終點。證明如下 不妨假設p q r,因為當r max p,q...