题意
给出v,x,y
求一个最小的t满足 y/(v+x*t) + t
最小
思路
v,x,y都是已知的,那么这个式子可以转化为 m1/(m2+m3*t) + t
比如样例的话实际上就是y=2/x+x
,其中x>=0,这是一个凹函数,先下降再上升,可以用三分来求极值
Go代码
package main import ( "fmt" ) func main() { var v, x, y float64 fmt.Scan(&v, &x, &y) var l, r float64 = 0.0, 1_000_000_000 cul := func(x,y,v, t float64) float64 { return y/(v+x*t) + t } for r-l >= 1e-7 { tmp := (r - l) / 3.0 mid1, mid2 := l+tmp, l+2*tmp res1, res2 := cul(x,y, v, mid1), cul(x,y, v, mid2) if res1 >= res2 { l = mid1 } else { r = mid2 } } fmt.Println(cul(x,y, v, l)) }